Ich habe die gleiche Frage, kann sie aber nicht stellen, weil es eine doppelte Frage wäre.
Die übliche Antwort, nämlich die Verwendung von exit, funktioniert nicht, wenn das Skript etwas komplizierter ist. Wenn Sie einen Hintergrundprozess verwenden, um die Bedingung zu prüfen, beendet exit nur diesen Prozess, da er in einer Sub-Shell läuft. Um das Skript zu beenden, müssen Sie es explizit beenden (zumindest ist das die einzige Möglichkeit, die ich kenne).
Hier ist ein kleines Skript, wie man das macht:
#!/bin/bash
boom() {
while true; do sleep 1.2; echo boom; done
}
f() {
echo Hello
N=0
while
((N++ <10))
do
sleep 1
echo $N
# ((N > 5)) && exit 4 # does not work
((N > 5)) && { kill -9 $$; exit 5; } # works
done
}
boom &
f &
while true; do sleep 0.5; echo beep; done
Dies ist eine bessere Antwort, aber immer noch unvollständig und ich weiß wirklich nicht, wie ich die Ausleger Teil.