Mein Skript fetch_remote_work.sh
ist ziemlich langsam, da es eine Verbindung zu einem Netzwerk herstellt. Ich muss es viele Male ausführen, bis es funktioniert.
./fetch_remote_work.sh
while [ $? -ne 0 ]
do
./fetch_remote_work.sh
done
Das funktioniert offensichtlich gut. Allerdings möchte ich nicht gezwungen sein, den ersten aufzurufen ./fetch_remote_work.sh
. Ich weiß, dass in anderen Sprachen wiephp, da ist eintun, währendSchleife, die mindestens die erste Iteration ausführt. Das wäre sehr sauber, wenn es sie gäbe inSchlag
Meine Frage lautet also: Gibt es einen saubereren Weg als den, den ich gewählt habe?
Antwort1
Verwenden Sie den Befehl selbst als Bedingung für die while
Konstruktion.
while ! ./fetch_remote_work.sh; do :; done
Antwort2
Wenn Sie etwas ausführen möchtenbises hat einen Null-Rückgabecode,
until [ $RANDOM -eq 42 ]
do
echo looking for the answer to life, the universe, and everything
done
(oder als Einzeiler)
until [ $RANDOM -eq 42 ]; do echo looking for the answer to life, the universe, and everything; done
Für Ihr Beispiel:
until ./fetch_remote_work.sh; do :; done
Diese Schleife tut "nichts" (führt die:
eingebaut)bisDas Skript fetch_remote_work.sh gibt 0 zurück.
Antwort3
Ändern Sie die erste Zeile in false
, um die gewünschte Bedingung für die erste Iteration zu erzwingen.