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