У меня есть сценарий Expect, который я использую для подключения к серверу ssh, запуска запроса и выхода.
Однако, когда я запускаю сценарий ожидающих сообщений, по какой-то причине вывод команды "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
Заранее спасибо!