expect 스크립트를 사용하여 원격 서버에 명령을 보내려고하는데 문제가 있습니다. 스크립트에서 명령을 send 명령에 수동으로 삽입하면 명령이 Ok가되지만 인수 ($ 명령)를 통해 예외 스크립트에 전달하면 명령이 작동하지 않습니다. 원격 서버에서 실행하려는 명령은 다음과 같습니다.파이프 및 특수 문자가 작동하지 않는 명령 변수가 필요합니다.
top -b -n 2 | 헤드 -15 & & ls -lrt/var/log | 머리 -10
예 : ./myexpectscript 암호 IP "최고 -b -n 2 | 머리 -15 &"
업데이트 : 내가 보내는 모든 명령 (즉, 하나 이상의 것을 알아 원격 서버에서이 스크립트를 통해 문자열) 예를 들어 ... 중괄호 내에서 실행됩니다
./myexpectscript 암호 IP "PWD는"
./myexpectscript 암호 IP "에코 안녕하세요"대답은 괜찮습니다 :
나는 따옴표 명령 작품을 제거하면# {echo hello}
/bin/sh: {echo: not found
:
./myexpectscript 비밀번호 IP 에코 인사를
# echo hello
hello
그래서, 문제는 배수 한 줄 명령을 파이프 실행하고자하는 것입니다 : 내 스크립트를 제외한 통해 서버에
top -b -n 2 | head -15 && ls -lrt /var/log | head -10
내가 가지고 :
# {top -b -n 2 | head -15 && ls -lrt /var/log | head -10}
/bin/sh: {top: not found
ls: /var/log: No such file or directory
head: invalid number '10}'
큰 따옴표로 작동해야하지만 중괄호로 명령이 있습니다. 다른 유형의 다른 서버에서이 스크립트를 시도했지만 동일한 문제가 발생했습니다.
#!/usr/bin/expect -f
set password [lrange $argv 0 0]
set ipaddr [lrange $argv 1 1]
set command [lrange $argv 2 end]
set timeout -1
spawn ssh [email protected]$ipaddr
match_max 100000
expect "*?assword:*"
send -- "$password\r"
expect "*\\\[0-7\\\]:*"
send -- "5\r"
expect "*\\\[0-4\\\]:*"
send -- "3\r"
expect "\\\#*"
#spawn {*}$command
#eval spawn $command
#send -- "$command\r"
send -- "top -b -n 2 | head -15 && ls -lrt /var/tslog | head -10\r"
expect "\\\#*"
send -- "exit\r"
expect "*\\\[0-4\\\]:*"
send -- "0\r"
expect "*\\\[0-7\\\]:*"
send -- "0\r"
expect eof
당신이 기대하는 스크립트 –