我正在尝试制作一个bash / expect脚本以SSH到APC PDU(电源条)中,并基于命令行参数远程重启插座。到目前为止,我有这个:
#!/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"
Run Code Online (Sandbox Code Playgroud)
因此,SSH的生成工作正常,并且可以正确输入密码,但是在我连接到PDU之后,它显示了选项界面,我的脚本发送的是12而不是1(输入)2。抱歉,这很令人困惑。这是它的作用:

它显示了12,而不是1,然后显示了一个换行符,再显示了2。我特别希望它在此行中的1之后发送一个换行符 send "1\n"
为什么\ n在此示例中不起作用?谢谢!
小智 5
期望使用\ r(回车)而不是\ n(UNIX新行)。您还可以通过以下方式简化您的期望脚本:
expect {
">" {send "1\r"; exp_continue}
# Next expect token and response and so on
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3694 次 |
| 最近记录: |