2015-05-28 3 views
0

Я пытаюсь придумать простой сценарий ожидания, который позволяет мне войти в систему и запустить одну команду ... примерно так:Как прокрутить вывод терминала с помощью Expect Script?

Проблема у меня в том, что вывод из одного шоу переполнение команд, за экраном дисплея появляется сообщение -More--. На --More-- подскажите, у вас есть следующие варианты:

  • Нажмите Ctrl + C, Q или Q, чтобы прервать выход и вернуться к командной строке.

  • Нажмите пробел, чтобы отобразить дополнительный экран вывода.

  • Нажмите Enter, чтобы отобразить еще одну строку вывода.

В конце концов, я хочу записать весь вывод команды show, но мой скрипт синхронизируется с первым приглашением --More--. Как я могу заставить скрипт отправлять новые строковые символы (т. Е. пробел) каждый раз, когда он получает приглашение --More--?

Спасибо заранее,

/USR/бен/планирующего

икры телнет 192.168.0.1
ожидает "Имя пользователя:"
отправить "MyUserName \ г"
ожидать «assword: "
отправить "MyPassword \ г"
посыла "показать ф ИНТ ш \ г"
взаимодействуют таймаут 5
отправьте - «exit \ r»

+0

Это означает, что вы хотите получить доступ к маршрутизатору или коммутатору cisco через bash, затем добавить некоторые команды, а затем выйти из сеанса, не так ли? –

ответ

2

Если вы имеете дело с терминалом Cisco (как он кажется), вы можете установить длину терминала в ноль (путем отправки «term len 0»), поскольку 0 означает «нет паузы». Это лучший подход, чтобы избежать сценария ожидания от необходимости выполнять «дополнительную работу» при работе с разбитым на страницы выводом.

В противном случае вы можете сделать что-то вроде этого:

expect { 
    -ex "--More--" { send -- " "; exp_continue } 
    "*#" { send "exit\r" } 
} 

«-ex», чтобы избежать ожидать от мышления «--More--» это флаг, поскольку он начинается с дефиса. При совпадении вы отправляете пробел для прокрутки другого экрана и продолжаете ожидать, пока не вернетесь в приглашение (например, приглашение exec), и не выйдите.