Ожидайте, что в сценарии отсутствует вывод команды «Отправить» - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть сценарий 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

Заранее спасибо!

...