Automatisierung von interaktiven Skripten mit ‚expect‘

Der ein oder andere Entwickler stand sicherlich schon vor dem Problem, dass ein Skript, welches Eingaben vom Benutzer verlangt, automatisiert ausgeführt werden soll.

Während der Durchführung eines Kundenprojekts hatten wir folgende Herausforderung:

Beim Bauen eines Docker Images wird ein Skript ausgeführt. Das Skript entpackt eine vom Kunden gelieferte Binary, welche .run Skripte enthält. Eines dieser .run Skripte wird im Anschluss ausgeführt und verlangt 3 Nutzereingaben. Diese 3 Eingaben konnten wir nicht überspringen.

Wir konnten die .run Skripte in diesem Fall nicht anpassen, um die 3 Eingabeaufforderungen zu entfernen, da die .run Skripte zunächst in der vom Kunden gelieferten Binary steckten und erst entpackt werden mussten, was alles automatisiert ablief.

Das Expect-Command

Die Lösung hat das Kommandozeilentool „expect“ gebracht.

Mit Expect lassen sich interaktive Skripte automatisieren. Man schreibt hierzu ein Expect-Skript, welches das eigentliche Skript ausführt. Das Expect-Skript wartet dann auf bestimmte Ausgaben des ausgeführten Skripts und antwortet mit entsprechend definierten Eingaben:

Auf diese einfache Art und Weise konnten wir den Aufruf automatisieren. Der hier geschilderte Fall ist eher trivial, Expect bietet jedoch noch viele weitere Möglichkeiten, siehe hier.

NSIS vs. WiX – Zwei Installer im Vergleich

Spätestens gegen Ende der Implementierungsphase eines Projekts stehen viele Entwickler vor der spannenden Frage, mit Hilfe welcher Installer Technologie sie ihre Software dem Nutzer zur Verfügung stellen wollen. Die Möglichkeiten sind dabei vielfältig. Zu den bekanntesten Vertretern gehören Inno Setup, InstallShield, Nullsoft Scriptable Install System (NSIS) und Windows Installer XML (WiX).

Auch bei der Entwicklung des calvaDrive SyncClients mussten wir uns für einen Installer entscheiden und haben uns vor allem mit den beiden letztgenannten (NSIS und WiX) beschäftigt.

 

Mehr