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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我写了一个不可靠的失败模糊测试。我添加了一些调试代码,但现在我想运行测试,直到失败,因此我可以收集调试输出。

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

./runtest

我目前的解决方案是编写一个untilfail脚本:

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

然后使用它:

untilfail ./runtest

有一个更简单的解决方案吗?

提问于
用户回答回答于

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

while ./runtest; do :; done

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

用户回答回答于

如果你不想将复杂的管道线包装到shell脚本或函数中,则可以这样做:

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

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

扫码关注云+社区