Мой скрипт fetch_remote_work.sh
довольно медленный, потому что он подключается к сети. Мне нужно запустить его много раз, пока он не заработает.
./fetch_remote_work.sh
while [ $? -ne 0 ]
do
./fetch_remote_work.sh
done
Это, очевидно, работает хорошо. Однако мне не нравится быть обязанным звонить первому ./fetch_remote_work.sh
. Я знаю, что в других языках, таких какPHP-файл, 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
, принудительно задавая желаемое условие для первой итерации.