GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich automatisch auf Eingabeaufforderungen in einem Linux-Bash-Skript reagieren?

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

Linux
  1. So verwenden Sie ein verschlüsseltes Passwort in einem Linux-Bash-Shell-Skript

  2. Wie kürze ich die Bash-Eingabeaufforderung unter Linux?

  3. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  4. So teilen Sie eine Zeichenfolge in Bash-Skript auf

  5. Wie kann ich ein Linux-Bash-Skript schreiben, das mir mitteilt, welche Computer in meinem LAN eingeschaltet sind?

So passen Sie die Bash-Eingabeaufforderung unter Linux an

So erstellen Sie ein Skript eines Linux-Befehls

Wie führe ich Linux-Bash-Befehle in einem PERL-Skript aus?

So führen Sie ein Bash-Skript aus

Wie führt man ein Bash-Skript aus?

Wie kann ich in einem Bash-Skript einen Hostnamen in eine IP-Adresse auflösen?