Ok. Eu rachei isso. Ele tinha que fazer algo com correspondência de padrão incorreta na parte expect
nas linhas finais do código.
O que eu, primeiro de tudo, fiz foi gerar um script gravado usando autoexpect
. Essa ferramenta é usada para gravar suas sessões e gerar um script com base nisso. Para fazer isso, instalei pela primeira vez o pacote autoexpect
(disponível no pacote expect-dev
em sistemas baseados no Debian) e gravei a minha sessão:
sudo apt-get install expect-dev #Since I'm on Ubuntu
autoexpect telnet 192.168.1.1
autoexpect
gerou automaticamente um script para mim. Quando eu corri este script, ele estava chegando até a execução do meu comando e executá-lo no roteador, mas foi então incapaz de sair. Tomando dicas deste script e lendo a página de manual do expect, eu finalmente descobri que havia algum problema com o reconhecimento de padrões. Eu finalmente modifiquei o script de acordo, e é isso que finalmente funciona:
#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
Então, a lição aprendida era que deveríamos usar autoexpect
para gerar scripts automaticamente. E, em seguida, se houver alguma falha nesses scripts gerados automaticamente, provavelmente seria devido ao reconhecimento de padrão incorreto na parte expect
.
No meu caso, a parte essencialmente defeituosa era:
expect -re ".*\$" #WRONG
expect "~ \$ " #RIGHT
As partes defeituosas dependerão completamente da sua sessão, com quem você está contatando. Entrar em contato com um servidor de correio através do telnet retornará saídas diferentes e você terá que corresponder de acordo.