Подтвердить что ты не робот

Неоднократно запускайте команду оболочки до тех пор, пока она не сработает?

Я написал нечеткий тест, который не выполняется. Я добавил код отладки, но теперь я хочу запустить тест, пока он не сработает, поэтому я могу собрать вывод отладки.

Я установил тест, чтобы запустить его, используя:

./runtest

Мое текущее решение - написать untilfail script:

#!/bin/bash
[email protected]
while [ $? -eq 0 ]; do
    [email protected]
done

Затем используйте его:

untilfail ./runtest

Есть ли более простое решение?

4b9b3361

Ответ 1

while выполняет команду для выполнения, поэтому вы можете использовать более простой

while ./runtest; do :; done

Это остановит цикл, когда ./runtest возвращает ненулевой код выхода (что обычно указывает на отказ).

Ответ 2

Если вы не хотите обертывать сложную линию трубопровода в оболочку script или функцию, то это работает:

while true; do 
  curl -s "https:..." | grep "HasErrors.:true"
  if [[ "$?" -ne 0 ]]; then 
    break
  fi
  sleep 120
done

HTTP-запрос в этом случае всегда возвращает 200, но также возвращает некоторый JSON, который имеет атрибут "HasErrors": true, когда есть ошибка.