
Ich habe eine For-Schleife in einem Shell-Skript a la:
#!/bin/bash
set -u
set -e
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
Die Absicht besteht darin, dass die For-Schleife abbricht, wenn einer der Unterbefehle einen ähnlichen Fehler ausgibt.
Jetzt habe ich eine Problemumgehung parat: (cd $l; ./run-tests.sh) || die "Message here"
zusammen mit einer geeigneten Definition von die
. Allerdings frage ich mich wirklich, warum die For-Schleife nicht wie erwartet von selbst beendet wird, wie es der Befehl „set -e“ vorgibt. Im Idealfall würde ich nicht jede For-Schleife auf diese Weise als Sonderfall behandeln. :)
Antwort1
Der Grund dafür, set -e
dass das Programm im Fehlerfall nicht sofort beendet wird, ./run-test.sh
sind die folgenden Zeilen:
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
für eine zusammengesetzte Anweisung. Der Status dieser zusammengesetzten Anweisung ist der Status der letzten Ausführung von ./run-tests.sh
.
Ihre Lösung klingt für mich gut.
Antwort2
Ich habe keine Kommentarrechte, also poste ich hier. Es hängt vom Skript in run-tests.sh ab. Sind Sie sicher, dass dies einen Wert ungleich Null ergibt:
./run-tests.sh
echo $?