【发布时间】:2020-10-19 00:40:55
【问题描述】:
为什么 launchd 不能加载我的 zsh 程序?我很困惑。我的 testplisterror.log 给了我这个错误:
/bin/zsh:无法打开输入文件:/Users/controlroom/Desktop/Bin/testplist.zsh -- 下面是我位于 LaunchAgents 目录中的 com.testplist.plist 文件。
<?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.testplist.plist</string>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>/Users/controlroom/Desktop/Bin/testplist.zsh</string>
</array>
<key>StartInterval</key>
<integer>30</integer>
<key>StandardOutPath</key>
<string>/Users/controlroom/Desktop/testplist.log</string>
<key>StandardErrorPath</key>
<string>/Users/controlroom/Desktop/testplisterror.log</string>
</dict>
</plist>
这是我的 testplist.zsh 文件:
#!/bin/zsh
date >> ~/Desktop/launchdtest.txt
【问题讨论】:
-
您可能会遇到麻烦,因为 Transparency Consent and Control (TCC) 限制了对“个人”数据的访问,包括用户桌面文件夹中的任何内容。可能可以授予对作业的访问权限(有关一些信息,请参阅here),但首先我会尝试将文件移动到非私人区域。
-
谢谢,成功了!所以我把脚本放在“共享”的一个新文件夹下,现在我的 zsh 脚本可以工作了。我不敢相信这是TCC!狡猾的苹果。那么我如何知道我有权访问的所有文件夹以从 launchd 运行脚本?
-
我认为这更多的是避免受限制的文件夹。不幸的是,受限位置的列表不断扩大(请参阅here),所以我不知道一个完全明确的答案。就个人而言,我倾向于将 unixish 自动运行脚本放在 /usr/local/libexec/ 中(默认情况下不存在,但您可以创建它)。
标签: macos zsh macos-catalina launchd