Запустить очень медленный скрипт, пока он не завершится успешно

Запустить очень медленный скрипт, пока он не завершится успешно

Мой скрипт fetch_remote_work.shдовольно медленный, потому что он подключается к сети. Мне нужно запустить его много раз, пока он не заработает.

./fetch_remote_work.sh

while [ $? -ne 0 ]
do
    ./fetch_remote_work.sh
done

Это, очевидно, работает хорошо. Однако мне не нравится быть обязанным звонить первому ./fetch_remote_work.sh. Я знаю, что в других языках, таких как, Eстьделать покацикл, который запускает по крайней мере первую итерацию. Что было бы очень чисто, если бы существовало в

Поэтому мой вопрос: есть ли более чистый способ, чем тот, что сделал я?

решение1

Используйте саму команду как условие для whileконструкции.

while ! ./fetch_remote_work.sh; do :; done

решение2

Если вы хотите что-то запуститьдоимеет нулевой код возврата,

until [ $RANDOM -eq 42 ]
do 
  echo looking for the answer to life, the universe, and everything
done

(или в виде однострочника)

until [ $RANDOM -eq 42 ]; do echo looking for the answer to life, the universe, and everything; done

Для вашего примера:

until ./fetch_remote_work.sh; do :; done

Этот цикл «ничего не делает» (выполняет:встроенный)доскрипт fetch_remote_work.sh возвращает 0.

решение3

Измените первую строку на false, принудительно задавая желаемое условие для первой итерации.

Связанный контент