ожидайте telnet - команда не выполняется - PullRequest
0 голосов
/ 29 мая 2018

Я борюсь с выполнением команды через Telnet / Expect.

set send_slow {500 .5}
send -s -- "show slot *\r"
expect {
    ".*>" {
        send -s -- "y\r"
        exp_continue
    }
    ".*#\s"
}
send -s "who\r"
expect "# "
send -s "alm\r"
expect "# "
send -s -- "logout\r"

show slot команда печатает карту в слоты.Из-за пейджинга пользователя просят продолжить.После выполнения отображается приглашение NODE2-1#, и я хочу выполнить команду who.

Что я получаю:

2/36 PF                   Empty                Up      Down    UEQ
2/37 FAN                  FAN                  Up      Up
2/38 Empty                Empty                Down    Down    UAS UEQ
2/39 Empty                Empty                Down    Down    UAS UEQ
25/1 SFD40                SFD40                Up      Up

Node2-1#<br> Node2-1# who

Session          Username                          Date         Terminal
-------------------------------------------------------------------------------
116 (cli tel) *  admin                             May 29 06:57 XX.X.XX.XX

Node2-1# almlogout

Alarm Status:  Critical-3    Major-0    Minor-0

Как видите, первое приглашение остается пустыма во втором есть команда.Для его выполнения требуется несколько секунд.

Более того, ниже видно, что в приглашении есть вставленная команда almlogout.Эти две отдельные команды -> alm и logout.Однако они вставляются вместе.

Вопрос в том, как выполнить команду без подсказки без задержки, а во-вторых, как разделить две команды

.

1 Ответ

0 голосов
/ 29 мая 2018

По умолчанию шаблон оператора expect имеет стиль glob, поэтому ".*>" должно быть -re ".*>", а ".*#\s" должно быть -re ".*#\\s" или -re {.*#\s} ("\s" на самом деле "s").

А поскольку .* не может ничего совпадать, то -re {.*>} совпадает с -re {>}, а -re {.*#\s} совпадает с -re {#\s}.

...