Expect не распознает команду "timeout" в цикле - PullRequest
0 голосов
/ 25 июня 2018

У меня есть ожидаемый сценарий для проверки состояния входа в систему, если консоль, отображающая "poplar login",, отправит имя пользователя (без пароля) и подождет 180 секунд, пока система не будет готова.Как только система готова, она проверит, показывает ли консоль "root@poplar", если да, она сломается и отправит сообщение success.Если нет, ожидайте, что истечет время ожидания, и вернитесь к "poplar login"

мой сценарий

set timeout 2 
expect {
            "poplar login" {
               send "root\r";
               sleep 180; send "\r" ;
               send "\r" ;
               exp_continue
            }
            "root@poplar"
            timeout { send "\r" ; exp_continue }
} 

send_user "login success!\n"

Почему-то время ожидания всегда не читается ожидаемым, и журнал выглядит следующим образом:

 expect: does"\r\n\u001b[r\u001b[m\u001b[2J\u001b[H\u001b[?7h\u001b[?1;4;6l
 \u001b[?1049h\u001b[4l\u001b[?1h\u001b=\u001b[0m\u001b(B\u001b[1;70r\u001b[H
 \u001b[2J\u001b[H\u001b[2J"(spawn_id exp5) match glob pattern "poplar login"? no
 "root@poplar"? no 
 " send "\r" ; exp_continue "? no
 expect: timed out
 login success! 
 send: sending "reboot\r" to { exp5 }

Пожалуйста, помогите, спасибо

1 Ответ

0 голосов
/ 25 июня 2018

Измените

"root@poplar"
timeout { send "\r" ; exp_continue }

на

"root@poplar" {}
timeout { send "\r" ; exp_continue }

, иначе оно будет обработано как

"root@poplar" timeout
{ send "\r" ; exp_continue }

Вот почему вы видите сообщение отладки

" send "\r" ; exp_continue "? no

потому что деталь { send "\r" ; exp_continue } обрабатывается как ШАБЛОН.

...