macOS Launch Job执行bash脚本返回异常代码126问题求助
问题原因
你遇到的Operation not permitted报错是 macOS 系统自带的 TCC(透明度、同意与控制权)安全机制导致的,既不属于脚本本身的执行权限不足,也不属于启动用户的常规权限不足:
- 你的脚本存放在
/Users/intern/Desktop/路径下,桌面、文档、下载这类用户目录都属于 macOS 默认的受保护路径 - 你在终端手动执行脚本时,终端已经提前拿到了对应路径的访问授权,所以可以正常运行;但
launchd运行任务时使用独立的服务上下文,默认没有访问用户受保护目录的权限,就会触发权限拦截
解决方案
你可以任选以下任意一种方案解决:
方案1(更推荐,无需修改系统权限)
把脚本移动到不受 TCC 限制的公共路径,操作步骤:
- 把
testing.sh移动到/usr/local/bin/目录下(如果目录不存在可以先执行sudo mkdir -p /usr/local/bin创建) - 修改plist文件里
ProgramArguments对应的脚本路径为/usr/local/bin/testing.sh - 重新加载plist生效:
launchctl unload ~/Library/LaunchAgents/com.intern.testing.plist launchctl load ~/Library/LaunchAgents/com.intern.testing.plist
方案2(保留脚本原路径)
给launchd授予全磁盘访问权限:
- 打开「系统设置」→「隐私与安全性」→「全磁盘访问」
- 点击左下角解锁按钮,输入密码确认
- 按下快捷键
Command + Shift + G,输入路径/sbin/launchd,选中后添加到权限列表 - 重启电脑后重新触发任务即可
额外补充说明
你10月4日修改脚本时出现的变量赋值语法错误也会导致执行失败:bash的变量赋值不允许等号两侧加空格,fileName = "/tmp/a.txt"是错误写法,必须写成fileName="/tmp/a.txt",你后续修改后的版本已经修正了该问题,不需要再调整。
内容的提问来源于stack exchange,提问作者festivezine
相关产品推荐
相关产品推荐

