Answers:
while
需要执行一条命令,因此您可以使用更简单的命令
while ./runtest; do :; done
当./runtest
返回非零退出代码(通常表示失败)时,这将停止循环。
但是,为了进一步简化当前的解决方案,您只需将您的untilfail脚本更改为如下所示:
#!/bin/bash
while "$@"; do :; done
然后,您可以使用任何已在使用的命令来调用它:
untilfail ./runTest --and val1,val2 -o option1 "argument two"
[
是一个命令。这是新用户的一种常见的误解[
是部分if
和while
语法。
count=0
在循环之前,然后放置在循环中(而不是:
循环(无操作)),(( count++ ))
这会使计数器递增。
say
扬声器,并且您可以在扬声器while ./runtest; do :; done && say test failed
停止运行时得到通知
say
是特定于macOS的。
如果您不想将复杂的管线包装到Shell脚本或函数中,则可以这样做:
while true; do
curl -s "https:..." | grep "HasErrors.:true"
if [[ "$?" -ne 0 ]]; then
break
fi
sleep 120
done
在这种情况下,HTTP请求始终返回200,但在出现错误时也会返回一些具有属性“ HasErrors”:true的JSON。
在一个系统中有一个类似的问题,该系统的Shell重试逻辑到处都是重复的,我做了一个专门的工具来解决这个问题,称为“ retry”:
retry --until=fail ./runtest
一个更复杂的示例:
retry --until=fail --message="test succeeded" --delay=1 ./runtest
可从https://github.com/minfrin/retry获得该工具。