Wie umgeht man Benutzerinteraktionen in einem Skript?

Wie umgeht man Benutzerinteraktionen in einem Skript?

Ich versuche, die Installation eines Programms über ein Shell-Skript zu automatisieren. Es gibt einige Schritte, die eine Benutzerinteraktion über die Befehlszeile erfordern (Bestätigung, Ja/Nein usw.). Wie kann ich das am besten umgehen? Ich weiß, dass eine Möglichkeit darin besteht, ein Expect-Skript zu verwenden. Ich wollte nur wissen, ob es dafür eine bessere/sauberere Möglichkeit gibt.

Antwort1

Wenn die Interaktion einfach ist, also nur von der Standardeingabe liest, können Sie die einzelnen Zeilen einfach an die Eingabe des Programms senden:

( echo yes ; echo 1024; echo yes ) | install.sh

Antwort2

Wenn Sie etwas tun möchten, das nicht nur von stdin liest (z. B. FTP-Login), verwenden Sieerwarten.

Antwort3

Aus einem anderen Thread:

Wenn es für Ihren Befehl egal ist, wie schnell Sie Eingaben machen, und Sie nicht wirklich mit ihm interagieren müssen, können Sie ein Heredoc verwenden.

Beispiel:

#!/bin/bash
command_you_want_to_execute <<EOD
interaction_1
intereaction_2
EOD

Wenn Sie eine Verzweigung basierend auf der Programmausgabe benötigen oder wenn Ihr Programm irgendwie empfindlich auf die zeitliche Abstimmung Ihrer Befehle reagiert, dann ist Expect das Richtige für Sie.

verwandte Informationen