期望脚本缺少发送命令的输出

时间:2019-04-08 20:34:31

标签: expect

我有一个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

预先感谢!

0 个答案:

没有答案