Skriptauswahl der Optionen im laufenden Programm

0

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.

izxle
quelle

Antworten:

0

Eine Möglichkeit ist, alles zu ändern

IF "%ID%"=="0" ( ... & ... & ... ) ELSE ^
IF "%ID%"=="1" ( ... ) ELSE ^
IF "%ID%"=="2" ( ... ) ELSE ^
REM default case...

Zweite Option

echo Choose from the list given below:
echo [1] Option 1
echo [2] Option 2
echo [3] Option 3

set /a one=1
set /a two=2
set /a three=3
set /a four=4
set input=
set /p input= Enter your choice:
if %input% equ %one% goto Z if NOT goto Start2
if %input% equ %two% goto X if NOT goto Start2
if %input% equ %three% goto C if NOT goto Start2
if %input% geq %four% goto N

:Z
cls
echo You have selected : Option 1
set option=Option 1
echo %year%
call:branches option

pause
exit

Quelle

StackOverflow Thread sie haben mehr Kenntnisse in Batch und Programmiersprache

DIDIx13
quelle
Kennt jemand einen SWITCH CASE oder SELECT CASE im Batch?
DIDIx13
Ihre Antwort verwirrt mich wirklich. Vielleicht, weil ich mit meiner Redaktion nicht klar war. Ich möchte ein Bash-Skript verwenden, um mit dem Programm zu interagieren, ohne dass ich die Optionen auswählen muss (ich möchte sie nicht jedes Mal eingeben, wenn ich es ausführe).
Izxle
Tut mir leid, wenn ich Sie missverstanden habe. Um dies zu verdeutlichen, möchten Sie, dass ein Skript, das ausgeführt wird, den Benutzer auffordert, zwischen einigen Optionen zu wählen und den Code aus der ausgewählten Option auszuführen. Wenn ich mich immer noch irre, kannst du vielleicht ein Programmier-Flussdiagramm erstellen?
DIDIx13
0

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 echokönnen sich unterschiedlich verhalten, aber da echoein eingebautes bashund Sie 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 programStandardeinstellungen 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:

expectist ein Programm, das nach einem Skript mit anderen interaktiven Programmen "spricht". Wenn Sie dem Skript folgen, expectwissen Sie, was von einem Programm erwartet werden kann und wie die richtige Antwort aussehen sollte.

[…]

Im Allgemeinen expectist 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
Kamil Maciorowski
quelle