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 Programm
  • expect – wartet auf ein Muster in der Ausgabe
  • send – sendet eine Antwort (mit für Enter)
  • set timeout – maximale Wartezeit in Sekunden
  • exp_continue – nach einem Treffer weiter auf weitere Muster warten
  • interact – übergibt die Steuerung an den Benutzer
  • expect eof / expect timeout – auf Programmende bzw. Zeitüberschreitung reagieren
  • autoexpect – 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 -re mit 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.