Führen Sie ein sehr langsames Skript aus, bis es erfolgreich ist

Führen Sie ein sehr langsames Skript aus, bis es erfolgreich ist

Mein Skript fetch_remote_work.shist 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 wie, da ist eintun, währendSchleife, die mindestens die erste Iteration ausführt. Das wäre sehr sauber, wenn es sie gäbe in

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 whileKonstruktion.

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.

verwandte Informationen