Okay. Ich habe es geknackt. Es hatte etwas mit einem falschen Musterabgleich in dem expect
Teil in den letzten Zeilen des Codes zu tun .
Was ich zuerst gemacht habe, war die Erstellung eines aufgezeichneten Skripts mit autoexpect
. Dieses Tool dient zum Aufzeichnen Ihrer Sitzungen und zum Generieren eines darauf basierenden Skripts. Dazu habe ich zuerst das autoexpect
Paket ( expect-dev
auf Debian-basierten Systemen als Paket verfügbar ) installiert und dann meine Sitzung aufgezeichnet:
sudo apt-get install expect-dev #Since I'm on Ubuntu autoexpect telnet 192.168.1.1
autoexpect
automatisch ein Skript für mich generiert. Als ich dieses Skript ausführte, reichte es bis zur Ausführung meines Befehls und zur Ausführung im Router, konnte es jedoch nicht beenden. Ich nahm Hinweise aus diesem Skript und las die erwartete Manpage. Ich fand schließlich heraus, dass es ein Problem mit der Mustererkennung gab. Ich habe das Skript schließlich entsprechend modifiziert, und das funktioniert schließlich:
#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
Die Lektion war also, dass wir autoexpect
Skripte automatisch generieren sollten. Wenn diese automatisch generierten Skripts fehlerhaft sind, liegt dies höchstwahrscheinlich an einer falschen Mustererkennung im expect
Teil.
In meinem Fall war der im Wesentlichen fehlerhafte Teil:
expect -re ".*\$" #WRONG expect "~ \$ " #RIGHT
Die fehlerhaften Teile hängen vollständig von Ihrer Sitzung ab, an die Sie sich wenden. Wenn Sie einen E-Mail-Server über Telnet kontaktieren, werden unterschiedliche Ausgaben ausgegeben, und Sie müssen dementsprechend übereinstimmen.