我们有一个有时会成功的 helm 命令。
跑步:
cmd1 || cmd1
Run Code Online (Sandbox Code Playgroud)
如果第一次运行失败,将运行两次。如何继续运行 cmd1 直到它成功并在每次运行之间进行睡眠?谢谢。
Ste*_*itt 12
until将为您做到这一点:
until cmd1; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)
这将运行cmd1直到成功,每次运行之间等待一秒钟。
如果你想避免永远运行,你可以添加最大迭代次数:
max=5; until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done
Run Code Online (Sandbox Code Playgroud)
如果cmd1成功,则整个表达式将成功,并且$?将为 0。如果循环在未成功运行的情况下退出cmd1,则整个表达式将失败,并且$?将为非零。您可以使用它来决定要做什么:
max=5
if until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done; then
echo Succeeded
else
echo Failed
fi
Run Code Online (Sandbox Code Playgroud)
或者,更明确地说,
max=5
until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done
if [ "$?" = 0 ]; then
echo Succeeded
else
echo Failed
fi
Run Code Online (Sandbox Code Playgroud)