Korn 쉘과 Bash는 SSH를 통해 변수를 공백으로 대체합니다.

Korn 쉘과 Bash는 SSH를 통해 변수를 공백으로 대체합니다.

AIX 서버(Korn Shell)에서 IBM HMC(Restricted Bash Shell)로 SSH를 통해 원격 명령을 실행하여 LPAR ID 세부 정보를 수집하려고 했습니다.

SSH를 통해 lpar 이름을 공백으로 바꾸는 데 문제가 있습니다.

다음은 프레임워크의 총 서버 수입니다. SSH를 통해 HMC를 변수 LPAR로 교체하는 데 도움을 주실 수 있나요?

vio1001
vio1002
lpar4556 PROD DBX02

시도한 스크립트:

oldIFS=$IFS
IFS=$'\n'
set -o noglob
for lpar in $(ssh -nq hscroot@ibmhmc101 "lssyscfg -r lpar -m frame220-aix-p750 -F name,lpar_env" | cut -d, -f 1 | sort)
do
   echo "$lpar"
   for state in $(ssh -nq hscroot@ibmhmc101 "oldIFS=$IFS; IFS=$'\n';set -o noglob;lssyscfg -m frame220-aix-p750 -r lpar -F name:state --filter lpar_names="${lpar}" << "EOF"
EOF" | cut -d: -f2)
   do
      echo $state
   done
done

Error: 
vio1001
vio1002
lpar4556 PROD DBX02
/bin/bash: line 1: vio1001: command not found
/bin/bash: line 2: vio1002: command not found

Ru

i
g

답변1

당신은 보호가 필요합니다레파그래서 추가하겠습니다\각 큰따옴표 앞에

다음은 두 가지를 모두 테스트하는 예입니다.

for lpar in "1"  "2 3" "2;3" "abc" "abc def" "abc;def"   ; 
do 
     echo "#${lpar}#" ;
     ssh [email protected]  "printf 'arg1:%s arg2:%s\n'  --filter  par_names=\"${lpar}\"  " ;
     ssh [email protected]  "printf 'arg1:%s arg2:%s\n'  --filter  par_names="${lpar}"  " ;
done 

답변2

while read 라인을 사용하여 다음 해결 방법을 시도했습니다. 이것은 내 문제를 해결했습니다.

ssh hscroot@$hmc "lssyscfg -r lpar -m $frame -F name,lpar_env" | cut -d, -f1 | sort | while read line
do
lpar=`echo ${line} | cut -d= -f2`
echo "$lpar"
for lpar_id in $(ssh -nq hscroot@$hmc "lssyscfg -r lpar -m $frame -F name:lpar_env:lpar_id --filter lpar_names="${lpar}" " | cut -d: -f3 | sort)
do
echo "$lpar_id"
done
done

관련 정보