Antworten:
Sie könnten some_command
als Ihre Testbedingung verwenden.
while ! some_command; do sleep 1; done
Die Bedingung bleibt so lange wahr, wie sie some_command
mit einem Fehler beendet wird.
Oder ausführlicher, wenn Sie zusätzliche Prüfungen durchführen möchten:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
Dafür ist die until
Schleife gedacht:
until some_command
do sleep 1
done
Es ist die logische Negation einer while
Schleife.
until
SchleifeDie until
Schleife soll kontinuierlich eine Verbindungsliste ausführen, solange eine andere Verbindungsliste einen Nicht-Null-Ausgangsstatus hat.
Das Format der till-Schleife lautet wie folgt:
bis Verbindungsliste-1 Führe Verbindung-Liste-2 aus erledigt
until
Befehl abgeschlossen. Andernfalls wird die Verbindungsliste 2 ausgeführt und der Vorgang wiederholt.Sie können einfach Folgendes tun:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
dies hat jedoch den nachteil, dass es immer eine sekunde zuerst schläft
Wenn Sie in der Lage sein möchten, mit einer Reihe von Befehlen zu beenden, um mit 0 zu beenden, können Sie Folgendes tun:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
das funktioniert natürlich auch nur für some_command
[
und ]
um die Befehle enthalten.
Weder funktioniert while ! ...
noch until ...
auf den Systemen, die ihre Shell-Umgebung vor POSIX.1-2001 eingefroren haben. Das tut es jedoch.
while :; do
if some command; then
break
fi
sleep 1
done
Wenn Sie keine vollständige Portabilität benötigen, warum schreiben Sie ein Shell-Skript? Perl ist mit größerer Wahrscheinlichkeit verfügbar als Bash.
sleep 1 while 0 != system qw(some command);
(Wie oben wird das sleep
nur ausgeführt, wenn der Befehl fehlschlägt.)