需要在终端窗口中通过 launchd 打开 OS X bash 脚本

需要在终端窗口中通过 launchd 打开 OS X bash 脚本

我有一个冗长而复杂的 bash 脚本,它可以正常工作,但我正在尝试自动化我的部署过程,而此时我感到很困惑。

我可以让脚本以 LaunchAgent 的形式运行,没有任何问题,但它当然会在启动时在后台运行。因此,我在脚本开始时设置了一个暂停,如果需要中断脚本,我可以按任意按钮。

问题是我需要在终端窗口中打开脚本,这样我才能按下按钮来取消或继续。这就是我的麻烦开始的地方。

该脚本有许多 sudo 命令。我创建了下面的命令.plist,我可以手动加载它。它可以正常工作并加载脚本,一切正常。但是,它在启动时什么也不做,只是在控制台中以错误代码 1 退出。

我尝试将其放入/Library/LaunchAgents/Library/LaunchDaemons。它基本上需要以 root 身份打开终端窗口,以便脚本内的所有命令都将以 root 身份运行,而无需我手动输入密码。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.deecies.first</string>
<key>ProcessType</key>
<string>Interactive</string>
<key>ProgramArguments</key>
<array>
    <string>open</string>
    <string>-a</string>
    <string>terminal</string>
    <string>/Users/admin/first-boot.command</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

我也尝试指定/usr/bin/open完整路径Terminal.app,但无济于事。我先尝试添加 sudo 字符串,/usr/bin/sudo但也没有用。

当它被放置在时,我确实设法打开一个终端窗口/Library/LaunchAgents,但是它似乎并没有以 root 身份打开终端或脚本,因为我对脚本中所有需要 sudo 的命令都得到了“权限被拒绝”的结果。

答案1

除了open Terminal,您还可以直接调用应用程序二进制文件(而不是 .app 文件)。以下方法应该适用于您的 launchd。请注意,Terminal 将启动、运行脚本,然后退出。根据您的 Terminal.app 首选项,终端窗口可能会立即消失,或者只是在屏幕上留下一个带有脚本输出的死窗口。

<array>
<string>/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal</string>
<string>/Users/admin/first-boot.command</string>
</array>

相关内容