创建一个 Bash 脚本,该脚本将执行一个程序,如果该程序退出且没有崩溃,则将再次运行它

创建一个 Bash 脚本,该脚本将执行一个程序,如果该程序退出且没有崩溃,则将再次运行它

我想知道创建在 MacOSX 中运行应用程序的 bash 脚本的最简单方法(它是基于 UNIX 的系统,所以我认为这是正确的地方)。等待程序退出。如果退出不是崩溃,请再次运行。否则,保持崩溃报告窗口打开并退出。

我希望这个脚本永远运行,直到崩溃或手动终止。

我有一个模糊的想法,但不确定。这是我到目前为止所拥有的:

echo "Launching Autorun…"

if ["$1" -eq "0"]; then
# Application exited successfully. Restarting.
/path/to/application.app
else
# An error occured. Do nothing and exit.
    exit
fi

答案1

这就是巴什while 循环做:

while /path/to/application.app
do
    :
done

它将运行应用程序,如果成功终止,则运行循环体。:是个shell 的无操作命令(循环必须有一个主体,所以这就是我们放在那里的);之后它返回顶部并再次运行程序。如果失败,循环将停止运行并且脚本退出。

然而,看起来您正在运行的可能是一个普通的 Mac 应用程序 ( .app):在这种情况下会出现一些问题。一是您需要使用open命令,而不是直接运行应用程序目录:open /path/to/application.app.

另一个是,当您这样做时,open通常会立即成功终止,无论应用程序继续做什么:这不是绝对通用的,但大多数都会。如果您这样做,您可以使用该-W选项强制open阻止,直到应用程序结束:open -W /path/to/application.app。请注意,如果应用程序已经在运行,则这将等到现有的执行也终止。

其中问题的严重程度取决于您运行的应用程序。如果效果不好,从 shell 执行此操作可能不是最佳选择。在这种情况下,您可能最好使用 AppleScript,您可以在提出不同的要求

答案2

我已经测试过这个:

#!/bin/bash
while <your_cmd_here>
do
    true
done

这是通过测试命令的返回代码(POSIX 样式)来实现的。 0 表示正常,其他任何内容都可以视为错误。

相关内容