Expect ist eine Erweiterung der Skriptsprache Tcl, mit der sich interaktive Terminal-Programme automatisieren lassen. Entwickelt von Don Libes am NIST (1990), wartet Expect auf bestimmte Ausgaben und sendet automatisch Antworten – so laufen Programme wie SSH, FTP oder passwd ohne manuelle Eingaben.
Erste Schritte
Ein einfaches SSH-Login-Skript sieht so aus:
#!/usr/bin/expect -f
set timeout 20
spawn ssh benutzer@host
expect "password:"
send "geheim123
"
interact
Ausgeführt wird es mit expect login.exp oder direkt nach chmod +x.
Die wichtigsten Expect-Kommandos
spawn– startet das interaktive Programmexpect– wartet auf ein Muster in der Ausgabesend– sendet eine Antwort (mitfür Enter)set timeout– maximale Wartezeit in Sekundenexp_continue– nach einem Treffer weiter auf weitere Muster warteninteract– übergibt die Steuerung an den Benutzerexpect eof/expect timeout– auf Programmende bzw. Zeitüberschreitung reagierenautoexpect– zeichnet eine Session auf und erzeugt ein lauffähiges Skript
Treffer landen in $expect_out(buffer), der gesendete Text in $send_out.
Praxis-Tipps
- Typische Einsatzfälle: SSH/FTP-Anmeldungen, interaktive Installer, Test-Automation von Konsolenanwendungen
- Passwörter stehen im Klartext im Skript – für Produktionssysteme stattdessen SSH-Keys verwenden
- Das Python-Pendant heißt
pexpect, nützlich für Python-Test-Suiten - Bei instabilen Prompts hilft
expect -remit regulären Ausdrücken (siehe Regex)
Verwandte Grundlagen: Tcl, Bash, SSH/SCP/rsync, Perl, Python, Batch/CMD. Wer strukturierte Shell-Pipelines bauen will, nutzt Nushell; regelbasierte XML-Transformationen übernimmt XSLT.