我有一个冗长而复杂的 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>