在shell脚本中使用set和expect

时间:2014-03-26 10:22:42

标签: bash shell ssh set expect

我试图在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 {

1 个答案:

答案 0 :(得分:1)

正如错误消息所示,期望将;解析为命令分隔符,并且无法处理pwd'

那是因为语言中没有单引号字符串。

期望是tcl,你必须使用双引号:"ls; pwd"