创建一个将执行程序的 Bash 脚本,如果它退出而不崩溃,将再次运行它

Ben*_*den 8 osx bash shell-script

我想知道创建将在 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
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 13

这就是 Bash while 循环所做的:

while /path/to/application.app
do
    :
done
Run Code Online (Sandbox Code Playgroud)

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

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

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

其中有多少问题取决于您正在运行的应用程序。如果它不能很好地发挥作用,那么从 shell 执行此操作可能不是最佳选择。在这种情况下,您最好使用 AppleScript,您可以在Ask Different询问


fdu*_*uff 0

我已经测试过这个:

#!/bin/bash
while <your_cmd_here>
do
    true
done
Run Code Online (Sandbox Code Playgroud)

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