当前位置: 首页 > 知识库问答 >
问题:

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

沃博裕
2023-03-14

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

我已经设置了测试,因此可以使用:

./runtest

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

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

然后使用它:

untilfail ./runtest

有更简单的解决方案吗?

共有3个答案

袁建木
2023-03-14

在到处复制shell重试逻辑的系统中遇到类似问题后,我制作了一个专用工具来解决这个问题,称为“重试”:

retry --until=fail ./runtest

一个更复杂的例子:

retry --until=fail --message="test succeeded" --delay=1 ./runtest

工具可从https://github.com/minfrin/retry.

戚阳文
2023-03-14

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

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

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

晁开宇
2023-03-14

需要一个命令来执行,因此您可以使用更简单的

while ./runtest; do :; done

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

不过,要进一步简化当前的解决方案,只需将untilfail脚本更改为如下所示:

#!/bin/bash

while "$@"; do :; done

然后您可以使用您已经使用的任何命令调用它:

untilfail ./runTest --and val1,val2 -o option1 "argument two"
 类似资料:
  • 问题内容: 我在一个应用程序上工作,但有一个关于从Java应用程序运行shell命令的问题。这是代码: 但是当我尝试执行命令时: myapp读取 为两个单独的参数。但是我只想读取一个参数。 当我直接从终端运行此命令时,它执行成功。 我试过,, 但对我没有工作。我如何才能将此参数作为一个参数读取。 问题答案: 我记得exec方法的重载分别为参数提供了一个参数。你需要用那个 对。就这个 只需将命令行和

  • 我想使用从gulp运行shell命令。我看到下面这个成语被用于gulpfile。 这是从吞咽任务中运行命令的惯用方法吗?

  • 当我在命令行中运行TestNG时,抛出异常: c:\test>java org.testng.testng testng.xml线程“main”java.lang.noClassDefounderror:com/beust/jcommander/parameterexception在java.lang.class.getDeclaredMethods0(本机方法)在java.lang.class.

  • 我有一个案例,我想问我可以解决与Spring壳。我有一个Main.jar应用程序,它有几个部署在Wildly服务器上的Spring任务。在我的例子中,我不能停止或重新部署main.jar,因为必须不停地提供服务。

  • 问题内容: 我的Linux机器上有一个名为images的文件夹。此文件夹已连接到网站,该网站的管理员可以向该网站添加图片。但是,添加图片后,我希望命令运行所有图片的目录大小。 简而言之,我想知道在将新文件添加到特定位置时如何使服务器运行特定命令。 问题答案: 我不知道人们是如何将内容上传到此文件夹的,但是您可能想要使用比通过inotify监视目录更低的技术。 如果协议是FTP,并且您可以访问FTP

  • 问题内容: 我想在我的C程序中运行Shell命令。但问题是我不想让我的程序等到命令执行完毕。无需读取shell命令的输出(无论如何它都不会返回数据)那么,基本上可以吗? 问题答案: 并且是你所需要的