重复命令执行尝试,直到状态不明确为止,保留数据

重复命令执行尝试,直到状态不明确为止,保留数据

我遇到的情况是,守护进程重新启动后,前几次命令执行尝试返回 2(后跟 stderr 消息),然后一切正常。

为了绕过这个错误,我想到应该利用while/do/done/untilsome 的功能sleep,但有趣的部分是我应该拥有通过常规执行方式获得的所有数据:

...
RESULT=$(command param1 param2 2>&1)
SIG=$?
...

那么有没有一种方法可以command param1 param2重复执行,直到退出状态不是 2(任何给定值),并且在变量中具有 STDOUT+STDERRRESULT并在变量中具有退出状态SIG,如所介绍的那样?

答案1

outfile=$(mktemp)

while ! command param1 param2 >"$outfile" 2>&1; do
    [ "$?" -ne 2 ] && break
    sleep 10
done

result=$(<"$outfile")
rm "$outfile"

这将一遍又一遍地运行该命令(每次之间有 10 秒的延迟),直到它成功或至少不返回 a2作为退出状态。

该命令的输出被写入一个临时文件,在循环之后,该文件被读入一个变量并被删除。读取变量位需要bash,就像我在这里编写的那样。

答案2

until [ "$SIG" != "2" ]; do
   command param1 param2
   SIG=$?
done

这将每次运行该命令,直到返回一个不同于 2 的数字。

相关内容