Versuchen Sie Folgendes:
echo -e "yes\nyes\nno" | /path/to/your/script
Von help echo
:
-e
:ermöglicht die Interpretation der folgenden Backslash-Escapezeichen
Zur Standardeingabe leiten
Einige Skripte können Antworten von der Standardeingabe entgegennehmen. Eine der vielen Möglichkeiten, dies zu tun, wäre:
$ printf "%s\n" yes yes no | ./foo.sh
yes yes no
Dies ist einfach und leicht zu lesen, hängt jedoch davon ab, wie Ihre Skriptinterna mit der Standardeingabe umgehen, und wenn Sie das Zielskript nicht bearbeiten können, kann dies manchmal ein Problem sein.
Verwenden Sie Expect für interaktive Eingabeaufforderungen
Während Sie manchmal mit der Verwendung der Standardeingabe davonkommen, werden interaktive Eingabeaufforderungen im Allgemeinen besser von Tools wie Expect verarbeitet. Zum Beispiel ein gegebenes Skript foo.sh , können Sie foo.exp schreiben zu automatisieren.
Hinweis:Sie können auch autoexpect verwenden um aus einer interaktiven Sitzung ein Skript zu erstellen, das Sie dann bei Bedarf bearbeiten können. Ich kann es Leuten, die neu bei Expect sind, wärmstens empfehlen.
Bash-Skript:foo.sh
Dies ist das Skript, das Sie möglicherweise automatisieren möchten.
#!/usr/bin/env bash
for question in Foo Bar Baz; do
read -p "${question}? "
replies=("${replies[@]}" "$REPLY")
done
echo "${replies[@]}"
Skript erwarten:foo.exp
Hier ist ein vereinfachtes Expect-Skript, um das obige Bash-Skript zu automatisieren. Erwarte Schleifen, Verzweigungen und reguläre Ausdrücke können viel mehr Flexibilität bieten, als dieses stark vereinfachte Beispiel zeigt, tut es aber zeigen, wie einfach ein minimales Expect-Skript sein kann!
#!/usr/bin/env expect
spawn -noecho /tmp/foo.sh
expect "Foo? " { send -- "1\r" }
expect "Bar? " { send -- "2\r" }
expect "Baz? " { send -- "3\r" }
interact
Beispiel einer interaktiven Sitzung
So sieht Ihre interaktive Sitzung aus, wenn Sie das Expect-Skript ausführen. Es erzeugt Ihr Bash-Skript und reagiert wie angewiesen auf jede andere Eingabeaufforderung.
$ /tmp/foo.exp
Foo? 1
Bar? 2
Baz? 3
1 2 3