Я написал нечеткий тест, который ненадежно провалился. Я добавил некоторый отладочный код, но теперь я хочу запускать тест до тех пор, пока он не завершится неудачей, чтобы я мог собрать выходные данные отладки.
Я настроил тест, чтобы я мог запустить его с помощью:
./runtest
Мое текущее решение - написать untilfail
скрипт:
#!/bin/bash
$@
while [ $? -eq 0 ]; do
$@
done
Тогда используйте это:
untilfail ./runtest
Есть ли более простое решение?
Ответы:
while
принимает команду для выполнения, так что вы можете использовать более простойЭто остановит цикл, когда
./runtest
вернет ненулевой код выхода (который обычно указывает на ошибку).Чтобы еще больше упростить текущее решение, вы должны просто изменить свой сценарий tillfail, чтобы он выглядел следующим образом:
И тогда вы можете вызвать его любой командой, которую вы уже используете:
источник
[
это команда. Это распространенное заблуждение , с новыми пользователями,[
является частьюif
иwhile
синтаксис.count=0
перед циклом, затем вместо:
цикла (без операции) ставить(( count++ ))
- это увеличивает счетчик.say
громкоговорителем и можете использовать его,while ./runtest; do :; done && say test failed
чтобы получать уведомления о его остановкеsay
зависит от macOS.Если вы не хотите заключать сложную конвейерную линию в скрипт или функцию оболочки, это работает:
HTTP-запрос в этом случае всегда возвращает 200, но также возвращает некоторый JSON, который имеет атрибут «HasErrors»: true при возникновении ошибки.
источник
Имея подобную проблему в системе, в которой логика повторения оболочки повторялась повсюду, я создал специальный инструмент для решения этой проблемы, называемый «повтор»:
Более сложный пример:
Инструмент доступен по адресу https://github.com/minfrin/retry .
источник