如何处理 bash 函数中的命令失败?

Bre*_*zer 1 bash

我在部署我们代码的其中一台测试服务器上有一个 bash 函数,但其​​中一个命令经常失败,我们找不到原因。我们只是重试,直到它起作用。

如果该命令失败,我想让该函数重试。在函数中,我做了这样的事情:

command_to_run || { echo "failed, retrying"; call_function; }
Run Code Online (Sandbox Code Playgroud)

它像我想要的那样再次调用该函数,但它也允许该函数继续执行。如何在再次调用之前停止当前函数的执行?

Gor*_*son 8

这是@terdon 建议的一个更简单的变体:

while ! command_to_run; do
    echo "failed, retrying"
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

while实际上是接受一个命令,所以它可以command_to_run直接测试成功/失败,而不必处理$?. 通常,while只要命令成功就运行循环;在这种情况下,我使用!否定它并运行循环,只要命令失败(即直到它成功)。