Wie führe ich den Befehl im Hintergrund mit der case-Anweisung in bash aus?


0

Ich bin in Schwierigkeiten: mein Skript funktioniert nicht wie erwartet :)

Teil meines Codes:

readarray operations < operations.list
### lalala
for ((i=0; i<${#operations[@]}; i++)); do
    echo "Perform ${operations[$i]}"
    case ${operations[$i]} in
            "dog rex" )
                    command1 & ;;
            "cat sam" )
                    command2 & ;;
            * )
                    command3 ;;
    esac
done

Operations.list- Datei sieht aus wie

 dog rex
 cat sam
 frog mike
 monster jack

Ich erwarte, dass Command1 , Command2 und Command3 im Hintergrund ausgeführt werden müssen, aber es ist nicht. Was mache ich falsch?

Vielen Dank im Voraus und sorry für mein Englisch :)


1
Bitte bearbeiten und fügen Sie den Rest des Skripts hinzu.
DavidPostill

An der Syntax ist nichts auszusetzen. Sind Sie sicher, dass der Befehl {1,2,3} nicht ausgeführt wird, bevor Sie überprüfen, ob er ausgeführt wird?
Glenn Jackman

Warum die Gegenstimme? @DavidPostill: Ich glaube nicht, dass weitere Informationen hinzugefügt werden müssen.
MariusMatutiae

@MariusMatutiae Weil ich etwas wollte, das ich tatsächlich testen konnte ...
DavidPostill

Antworten:


1

Es funktioniert nicht, weil die Elemente Ihres Arrays dog \ n cat \ n, frog \ n, monster \ n sind . Also Ihr Fall sollte Aussage sein:

case ${operations[$i]} in
        dog\n)
                echo "Step dog" & wait ;;
        cat\n)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

Streng genommen halte ich es für eine schlechte Idee, die Möglichkeit auszuschließen, dass eine unschuldige Seele nach jedem Eintrag ein oder zwei Leerzeichen fallen gelassen hat, so dass ich lieber Folgendes verwenden würde:

case ${operations[$i]} in
        dog*)
                echo "Step dog" & wait ;;
        cat*)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

aber dann YMMV.


Und du hattest absolut recht!
HeroFromEarth
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.