我试图在shell脚本中使用expect并在每个系统上执行命令ssh进入少数系统(从test.txt文件中读取)。该脚本返回错误“无效的命令名称”。我在这里使用set和期望的方式不正确吗?
#!/usr/bin/expect -f
set username "root"
set pass "mypassword"
set fd [open /home/test.txt r]
set host [read $fd]
foreach line $host {
ssh -o StrictHostKeyChecking=no -n root@$host 'ls; pwd'
expect "User:" { send "${username}\r" }
expect "root's Password:" { send "${pass}\r" }
expect eof
}
错误返回
./expect.sh
spawn ssh -o StrictHostKeyChecking=no -n root@10.1.1.1
10.1.1.2
'ls
invalid command name "pwd'"
while executing
"pwd' "
("foreach" body line 3)
invoked from within
"foreach line $host {
答案 0 :(得分:1)
正如错误消息所示,期望将;
解析为命令分隔符,并且无法处理pwd'
。
那是因为语言中没有单引号字符串。
期望是tcl,你必须使用双引号:"ls; pwd"