Дождитесь подсказки в сценарии ожидания

Мне нужен скрипт expect, чтобы дождаться завершения выполненной команды, а затем выйти из telnet. Вот сценарий:

spawn telnet host
send "username\r"
send "password\r"
sleep 3
send "custom_command\r"
while {???}
{
    sleep 1
}
send "logout\r"
expect eof

Часть, которую я не знаю, как сформулировать, это ???. В основном мне просто нужно дождаться появления prompt, и как только оно появится, скрипт должен завершиться. Я предполагаю, что это должно быть что-то вроде [gets line != "prompt>" ].


person Ulrik    schedule 26.08.2014    source источник


Ответы (3)


Здесь уместна команда expect команды expect. Что-то вроде expect "prompt\n" с последующей отправкой логаута.

В качестве примечания: если это обычная система telnet, вам обычно следует дождаться запроса имени пользователя и пароля, прежде чем просто отправить его. См. как автоматизировать сеанс telnet с помощью expect или ожидайте сценарий для автоматизации входа в telnet

person ssnobody    schedule 26.08.2014

Я попробовал команду ожидания, но она не сработала, после некоторых исследований, проб и ошибок я понял следующее:

  1. Используйте expect "prompt>\r" вместо expect "prompt>"
  2. Фигурные скобки должны быть на той же строке, что и команда expect, например expect "prompt>\r" {
  3. Используйте set timeout -1 для бесконечного ожидания подсказки вместо 10 секунд

Итак, ответ:

spawn telnet host
send "username\r"
send "password\r"
sleep 3
set timeout -1
send "custom_command\r"
expect "prompt>\r" {
    send "logout\r"
    expect eof
}
person Ulrik    schedule 27.08.2014

Вы действительно должны ожидать чего-то, прежде чем что-то отправить, чтобы правильно выбрать время. Что-то типа:

exp_internal 1      ;# expect internal debugging. remove when not needed
spawn telnet host
expect "login: "
send "username\r"
expect "Password: "
send "password\r"
set prompt {\$ $}   ;# this is a regular expression to match the *end* of
                     # your shell prompt. Adjust as required.
expect -re $prompt
send "custom_command\r"
expect -re $prompt
send "logout\r"
expect eof
person glenn jackman    schedule 27.08.2014