Ist es möglich, dass ein Bash-Skript automatisch Eingabeaufforderungen verarbeitet, die dem Benutzer normalerweise mit Standardaktionen angezeigt werden? Derzeit verwende ich ein Bash-Skript, um ein internes Tool aufzurufen, das dem Benutzer Aufforderungen zur Eingabe von Aktionen anzeigt (Aufforderung zur Eingabe von J / N). Das Skript, das ich schreibe, muss jedoch vollständig "hands-off" sein Ich brauche eine Möglichkeit, um Y|N
an die Eingabeaufforderung zu senden , damit das Programm die Ausführung fortsetzen kann. Ist das möglich?
109
yes
dazu: unix.stackexchange.com/questions/47344/…Antworten:
Dies ist keine "automatische Vervollständigung", sondern eine Automatisierung. Ein gängiges Werkzeug für diese Dinge heißt Expect .
Sie könnten auch nur mit Piping-Eingaben von davonkommen
yes
.quelle
yes
hat den Trick getan. Glücklicherweise erforderten alle Eingabeaufforderungen ohnehin nur ein 'y'. Vielen Dank.Yes | command
möglicherweise nicht immer. Wenn es nur zu Installationszwecken ist, dann ist die Verwendung-y
eine bessere und bevorzugte Option.Eine einfache
Auf diese Weise können Sie eine beliebige Folge von "Y" oder "N" an Ihr Skript übergeben.
quelle
N
müsste, hätte ich diese Methode verwendet, aber ich brauchte nur Ys, also ging ich mityes
. Schade, dass ich zwei Antworten nicht akzeptieren kann, da beide richtig sind.N
musst, hast du jetzt eine gute Möglichkeit, dies zu tun."Y N"
als Eingabe für die erste Eingabeaufforderung und hängt an der zweiten Eingabeaufforderung und wartet darauf, dass ich sie vervollständige. Ich habe versucht, die Leerzeichen in Zeilenumbrüche zu ändern, aber das hat auch nicht funktioniert. Trotzdem habe ich der Eingabeaufforderung eine wörtliche Zeichenfolge gegeben.printf 'y\ny\ny\n' | ./your_script
. Auf diese Weise fügen Sie die neue Zeile für jeden erwarteten Eintrag manuell ein.printf '%s\n' Y Y N N Y N Y Y N
Setzt Zeilenumbrüche zwischen die Elemente, ohne dass eine große Formatzeichenfolge erforderlich ist.Ich fand, dass der beste Weg, um Eingaben zu senden, darin besteht, cat und eine Textdatei zu verwenden, um alle Eingaben weiterzugeben, die Sie benötigen.
quelle
Wenn Sie nur Y zum Senden haben:
Wenn Sie nur N senden müssen:
quelle
In meiner Situation musste ich einige Fragen ohne J oder N, aber mit Text oder Leerzeichen beantworten. Ich fand den besten Weg, dies in meiner Situation zu tun, darin, eine Shellscript-Datei zu erstellen. In meinem Fall habe ich es autocomplete.sh genannt
Ich musste einige Fragen für einen Exporteur von Doktrinschemata beantworten, damit meine Datei so aussah.
- Dies ist nur ein Beispiel -
Was mir an dieser Strategie gefällt, ist, dass Sie Ihre Antworten kommentieren können und bei Verwendung von EOF eine leere Zeile genau das ist (die Standardantwort). Es stellt sich heraus, dass dieses Exporteur-Tool ein eigenes JSON-Gegenstück zur Beantwortung dieser Fragen hat, aber ich habe das herausgefunden, nachdem ich dies getan habe =).
Um das Skript auszuführen, befinden Sie sich einfach in dem gewünschten Verzeichnis und führen es
'sh autocomplete.sh'
im Terminal aus.Kurz gesagt, indem Sie << EOL & EOF in Kombination mit Return Lines verwenden , können Sie jede Frage der Eingabeaufforderung nach Bedarf beantworten. Jede neue Zeile ist eine neue Antwort.
Mein Beispiel zeigt nur, wie dies mit Kommentaren auch mit dem Zeichen `gemacht werden kann, damit Sie sich daran erinnern, was jeder Schritt ist.
Beachten Sie, dass der andere Vorteil dieser Methode darin besteht, dass Sie mit mehr als nur J oder N antworten können. Sie können sogar mit Leerzeichen antworten!
Hoffe das hilft jemandem.
quelle
Hierfür gibt es ein spezielles eingebautes Util - " Ja ".
Um alle Fragen mit derselben Antwort zu beantworten, können Sie ausführen
Oder Sie können es in Ihr Skript einfügen, um eine spezifische Antwort auf jede Frage zu erhalten
quelle