Ich möchte ein Programm ausführen, das nach der Ausführung zwei Eingaben erwartet, um zu entscheiden, wie es ausgeführt wird. Wie so:
$ program <input_file>
Running program
1. Option one
2. Option two
select an option: <Expects `1` or `2`>
3. Option three
4. Option four
select an option: <Expects `3` or `4`>
Running with selected options.
Ich möchte es für viele Eingabedateien ausführen, für die die gleichen Optionen ausgewählt werden. Im Moment mache ich:
$ for i in *; do program $i; done
Dabei muss ich die Optionen für jede Datei manuell auswählen. Wie kann ich die Optionen an das Programm übergeben, um es zu automatisieren? So etwas wie:
$ for i in *; do program $i < <options>; done
Das Programm wiederholt die verfügbaren Optionen, wenn nicht die richtige ausgewählt ist. Also wenn ich es mit probiert habe {echo 2; echo 4}
und echo "2\n4\n"
es bei der ersten Optionsauswahl hängen bleibt.
bash
bash-scripting
izxle
quelle
quelle
Mir ist nicht klar, wie Sie das versucht haben, aber:
{echo 2; echo 4}
ist syntaktisch ungültig; du willst{ echo 2; echo 4; }
;echo "2\n4\n"
nur druckt2\n4\n
; Sie möchtenecho -ne "2\n4\n"
(Hinweis: Verschiedene Implementierungen vonecho
können sich unterschiedlich verhalten, aber daecho
ein eingebautesbash
und Sie bash markiert haben , gehe ich davon aus, dass Sie das eingebaute verwenden).Ich würde sagen, das könnte funktionieren:
Ich kann mir vorstellen, dass die
program
Standardeinstellungen stillschweigend erschöpft und verworfen werden, bevor nach Optionen gefragt wird, oder dass ein anderer Trick angewendet wird, der die obige Lösung zum Scheitern bringt. In diesem Fall versuchen Sie esexpect
, falls verfügbar.man 1 expect
Zustände:In diesem Beispiel werden 2 und 4 gesendet, wenn das Programm danach fragt:
Wenn Sie dies mit Shell-Variablen verwenden möchten, müssen Sie Folgendes korrekt angeben und escapen:
quelle