Хорошо. Я взломал это. Это должно было сделать что-то с неправильным сопоставлением с образцом в expect
части в последних строках кода.
В первую очередь я сгенерировал записанный скрипт, используя autoexpect
. Этот инструмент используется для записи ваших сессий и создания сценария на основе этого. Для этого я сначала установил autoexpect
пакет (доступный в expect-dev
пакете в системах на основе Debian), а затем записал мой сеанс:
sudo apt-get install expect-dev #Since I'm on Ubuntu autoexpect telnet 192.168.1.1
autoexpect
автоматически сгенерировал скрипт для меня. Когда я запустил этот скрипт, он доходил до выполнения моей команды и выполнял его в маршрутизаторе, но затем не мог выйти. Взяв подсказки из этого сценария и прочитав справочную страницу ожидаемых данных, я наконец понял, что с распознаванием образов возникли некоторые проблемы. Я наконец изменил скрипт соответственно, и вот что наконец работает:
#I am mentioning here only the end part of the complete script which was faulty # execute command expect "~ \$ " send -- "$routercmd\r" expect "~ \$ " send -- "exit\r" expect -- "TBS>>" send -- "exit\r" expect -- "*Are you sure to logout?*" send -- "y" expect eof
Итак, извлеченный урок состоял в том, что мы должны использовать autoexpect
для автоматической генерации сценариев. И затем, если есть какая-то ошибка в этих автоматически сгенерированных сценариях, это, скорее всего, будет связано с неправильным распознаванием образов в expect
части.
В моем случае, по существу, неисправная часть была:
expect -re ".*\$" #WRONG expect "~ \$ " #RIGHT
Неисправные части будут полностью зависеть от вашего сеанса, с которым вы связываетесь. Обращение к почтовому серверу через telnet вернет разные результаты, и вы должны будете соответствовать соответственно.