我有一个Expect脚本,该脚本用于SSH到服务器,运行查询并退出。
但是,当我运行Expect脚本时,出于某种原因,“ exp_send”命令的输出已被切断。几乎好像Expect不能捕获所有输出。每次我运行脚本时,输出都会在不同点被切断。有时它会打印50行,有时会打印100+,等等。然后随机地在最后一行中被截断的某处,我可以看到命令提示符与正在发送的“ quit”字符串一起出现。因此,我可以告诉它没有超时,并且返回代码为'0'。
如果我手动ssh到服务器并运行命令,则会得到257行输出。但是我的Expect脚本似乎在某个点随机切断了输出(*即使我处于超时值之下)。
在ssh会话上命令的输出是否接收得太快,而Expect不能完全捕获全部内容?
#!/usr/bin/expect -f
set force_conservative 1 ;# set to 1 to force conservative mode
if {$force_conservative} {
set send_slow {10 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
### Get Command Line Arguments:
set ipaddr [lindex $argv 0]
set username "administrator"
#Set the timeout limit
set timeout 45
#SSH to Server
spawn /usr/bin/ssh $username@$ipaddr
expect_after {
timeout {
exit 2
}
}
### Enter Password:
expect {
timeout {exit 10}
"$username@* password:" {send -- "password\r"}
}
### Send Query Command
expect {
timeout {exit 11}
-exact "admin:" { exp_send "blah blah blah\r" }
}
### Exit SSH Session
expect {
timeout {exit 13}
-exact "admin:" { exp_send "quit\r" }
}
expect eof
预先感谢!