反复运行一个shell命令,直到失败?

我写了一个模糊的testing,不可靠地失败。 我添加了一些debugging代码,但现在我想运行testing,直到失败,所以我可以收集debugging输出。

我已经安装了testing,所以我可以运行它使用:

./runtest 

我目前的解决scheme是写一个untilfail脚本:

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

然后使用它:

 untilfail ./runtest 

有一个更简单的解决scheme?

while需要一个命令来执行,所以你可以使用更简单

 while ./runtest; do :; done 

./runtest返回一个非零的退出码(这通常表示失败)时,这将停止循环。

如果你不想把一个复杂的pipe道线包装到一个shell脚本或函数中,那么这个工作就是这样的:

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

在这种情况下,HTTP请求总是返回200,但是也返回一些具有“HasErrors”属性的JSON:当出现错误时为true。