通过launchctl运行plist脚本时出现jq: command not found错误
解决launchctl启动脚本找不到jq的问题
问题根源
launchd(launchctl的底层服务)运行时的默认PATH环境变量不包含/usr/local/bin(brew安装软件的默认路径),而你手动执行脚本时用的是用户shell,PATH已经包含了这个目录,所以直接运行没问题,通过plist启动就找不到jq。
解决方案
方案1:使用jq的绝对路径
先在终端执行which jq,得到jq的绝对路径(比如/usr/local/bin/jq),然后修改脚本里所有jq的调用,替换成绝对路径:
JSON=$(echo '{}' | /usr/local/bin/jq --arg SONG "$SONG" --arg ARTIST "$ARTIST" --arg EMOJI "$EMOJI" '.profile.status_text=$ARTIST+" - "+$SONG | .profile.status_emoji=$EMOJI') curl -X POST --data "$JSON" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json; charset=utf-8" --silent -o /dev/null https://slack.com/api/users.profile.set | /usr/local/bin/jq 'del(.profile)'
方案2:在plist中配置环境变量
在你的plist文件的<dict>节点里添加EnvironmentVariables配置,把/usr/local/bin加入PATH:
<key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string> </dict>
修改后重新加载plist:
launchctl unload ~/Library/LaunchAgents/com.user.spotify-slack.plist launchctl load ~/Library/LaunchAgents/com.user.spotify-slack.plist
方案3:在脚本开头设置PATH
在spotify-slack.sh的最顶部添加PATH配置:
export PATH="/usr/local/bin:$PATH"
这样脚本运行时会先把/usr/local/bin加入环境变量,就能找到jq了。
内容的提问来源于stack exchange,提问作者jbrulmans
相关产品推荐
相关产品推荐

