Ответ 1
while
выполняет команду для выполнения, поэтому вы можете использовать более простой
while ./runtest; do :; done
Это остановит цикл, когда ./runtest
возвращает ненулевой код выхода (что обычно указывает на отказ).
Я написал нечеткий тест, который не выполняется. Я добавил код отладки, но теперь я хочу запустить тест, пока он не сработает, поэтому я могу собрать вывод отладки.
Я установил тест, чтобы запустить его, используя:
./runtest
Мое текущее решение - написать untilfail
script:
#!/bin/bash
[email protected]
while [ $? -eq 0 ]; do
[email protected]
done
Затем используйте его:
untilfail ./runtest
Есть ли более простое решение?
while
выполняет команду для выполнения, поэтому вы можете использовать более простой
while ./runtest; do :; done
Это остановит цикл, когда ./runtest
возвращает ненулевой код выхода (что обычно указывает на отказ).
Если вы не хотите обертывать сложную линию трубопровода в оболочку script или функцию, то это работает:
while true; do
curl -s "https:..." | grep "HasErrors.:true"
if [[ "$?" -ne 0 ]]; then
break
fi
sleep 120
done
HTTP-запрос в этом случае всегда возвращает 200, но также возвращает некоторый JSON, который имеет атрибут "HasErrors": true, когда есть ошибка.