Изчакайте подкана в очаквания скрипт

Имам нужда от 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 сесия с помощта на очакване или очаквайте скрипт за автоматизиране на влизането в telnet

person ssnobody    schedule 26.08.2014

Опитах командата за очакване, но не проработи, след известно проучване, опити и грешки разбрах следното:

  1. Използвайте expect "prompt>\r" вместо expect "prompt>"
  2. Къдравите скоби трябва да са на същия ред като командата за очакване, като тази 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