나는 AIX의 각 서버에 있는 어댑터의 마이크로코드 수준을 수집하기 위해 Expect 쉘을 사용하는 스크립트를 작성 중입니다.
#!/bin/ksh
for hostname in ABCD123 ABCD234 ABCD445
do
expect << 'EOS'
set hos {$hostname}
spawn ssh padmin@$hostname
expect "Password:"
send "ABC1234\n"
expect "$"
send "oem_setup_env\n"
expect "#"
send "lsmcode -A | sed -e 's/^/$hos: /'\n"
expect "#"
send "exit\n"
expect "$"
send "exit\n"
EOS
done
그러나 불행하게도 스크립트가 작동하지 않습니다. 도와주세요
출력은 다음과 같아야합니다
ABCD123 : sys0!system:CL320_040 (t) CL320_040 (p) CL320_040 (t)
ABCD123 : ent0!14101103.CN0110
ABCD123 : ent1!14101103.CN0110
ABCD123 : ent2!14101103.CN0110
ABCD123 : ent3!14101103.CN0110
ABCD123 : ent4!14108802.DV0210
답변1
인용된 heredoc을 사용하고 있기 때문에 쉘은 쉘 변수를 확장하지 않습니다 $hostname
. 이렇게 하세요: 환경을 통해 원하는 변수를 전달하세요.
export hostname
for hostname in ABCD123 ABCD234 ABCD445
do
expect << 'EOS'
set hos $env(hostname) ;# access the environment variable
spawn ssh padmin@$hos
expect "Password:"
send "ABC1234\r"
expect "$"
send "oem_setup_env\r"
expect "#"
send "lsmcode -A | sed -e 's/^/$hos: /'\r"
expect "#"
send "exit\r"
expect "$"
send "exit\r"
expect eof ;# wait for the connection to close
EOS
done
\r
일반적으로 명령을 보내려면 "Enter 키를 누르 세요"를 사용합니다 .