期待换行

时间:2016-05-02 18:40:33

标签: bash ssh expect

我正在尝试将bash / expect脚本ssh到APC PDU(一个powerstrip)中,并根据命令行参数远程重启插座​​。到目前为止,我有这个:

#!/usr/bin/expect

#usage: pdu.sh user pass ipaddr outletNum

set user [lrange $argv 0 0]
set pass [lrange $argv 1 1]
set ipaddr [lrange $argv 2 2]
set outlet [lrange $argv 3 3]

spawn ssh $user@$ipaddr

sleep 60

expect "*?assword*"
send "$pass\n"
expect ">"

sleep 5

send "1\n"
expect ">"
send "2\n"
expect ">"
send "1\n"
expect ">"

send "$outlet\n"
expect ">"
send "1\n"
expect ">"
send "2\n"
send "yes\n"
expect ">"
send "1\n"
send "yes\n"

send "exit\n"

所以SSH的产生工作,它正确输入密码,但是当我连接到PDU后,它显示选项界面,我的脚本发送12而不是1(输入)2。对不起如果那令人困惑。这是它的作用:

它显示12而不是1然后是换行符然后是2.我特意让它在此行的{1}之后发送换行符send "1\n"

为什么\ n在这个例子中不起作用?谢谢!

1 个答案:

答案 0 :(得分:4)

期望使用\ r(回车)而不是\ n(UNIX新行)。 您还可以通过以下方式简化您的期望脚本:

expect {
 ">" {send "1\r"; exp_continue}
 # Next expect token and response and so on 
}