als ich es mit probiert habe {echo 2; echo 4}
und echo "2\n4\n"
es bei der ersten auswahl der optionen hängen bleibt.
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 druckt 2\n4\n
; Sie möchten echo -ne "2\n4\n"
(Hinweis: Verschiedene Implementierungen von echo
können sich unterschiedlich verhalten, aber da echo
ein eingebautes bash
und Sie bash markiert haben , gehe ich davon aus, dass Sie das eingebaute verwenden).
Ich würde sagen, das könnte funktionieren:
for i in *; do { echo 2; echo 4; } | program "$i"; done
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 es expect
, falls verfügbar.
man 1 expect
Zustände:
expect
ist ein Programm, das nach einem Skript mit anderen interaktiven Programmen "spricht". Wenn Sie dem Skript folgen, expect
wissen Sie, was von einem Programm erwartet werden kann und wie die richtige Antwort aussehen sollte.
[…]
Im Allgemeinen expect
ist es nützlich, um ein Programm auszuführen, das eine Interaktion zwischen dem Programm und dem Benutzer erfordert. Notwendig ist lediglich, dass die Interaktion programmatisch charakterisiert werden kann.
In diesem Beispiel werden 2 und 4 gesendet, wenn das Programm danach fragt:
expect -c '
spawn program ./input_file
expect "2. Option two"
expect "select an option:*"
send "2\r"
expect "4. Option four"
expect "select an option:*"
send "4\r"
expect eof'
Wenn Sie dies mit Shell-Variablen verwenden möchten, müssen Sie Folgendes korrekt angeben und escapen:
for i in *; do
expect -c "
spawn program \"$i\"
expect \"2. Option two\"
expect \"select an option:*\"
send \"2\r\"
expect \"4. Option four\"
expect \"select an option:*\"
send \"4\r\"
expect eof"
done