我们有一个有时会成功的 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