Bash:重复运行命令直到成功

Bash:重复运行命令直到成功

我们有一个有时会成功的 helm 命令。

跑步:

cmd1 || cmd1

如果第一次运行失败,将运行两次。如何继续运行 cmd1 直到它成功并在每次运行之间进行睡眠?谢谢。

答案1

until将为您做到这一点:

until cmd1; do sleep 1; done

这将运行cmd1直到成功,每次运行之间等待一秒钟。

如果你想避免永远运行,你可以添加最大迭代次数:

max=5; until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done

如果cmd1成功,则整个表达式将成功,并且$?将为 0。如果循环在未cmd1成功运行的情况下退出,则整个表达式将失败,并且$?将为非零。您可以使用它来决定要做什么:

max=5
if until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done; then
    echo Succeeded
else
    echo Failed
fi

或者,更明确地说,

max=5
until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done
if [ "$?" = 0 ]; then
    echo Succeeded
else
    echo Failed
fi

相关内容