macos中“终端控制其他应用程序”的权限需在“隐私与安全性→自动化”中为terminal显式授权目标app(如finder、system events),并补充“辅助功能”权限;launchd后台脚本因无gui会话默认失效,须改用交互式shell或适配standardio。
macos中“终端控制其他应用程序”的权限,不是文件权限问题,而是系统级的自动化与辅助功能授权。它和 chmod 或文件夹读写权限无关,核心在于让终端(或通过终端启动的脚本、工具)获得调用其他app、操作界面、读取窗口内容等能力。
在“隐私与安全性”中开启终端的自动化权限
这是最直接且必需的一步。macOS将终端视为一个App,需显式授予其“控制其他App”的权利:
- 打开「系统设置」→「隐私与安全性」→ 向下滚动点击「自动化」
- 在左侧列表中找到「终端」(Terminal.app),点击展开
- 勾选右侧你希望它控制的App,例如:Finder(管理文件)、System Events(模拟按键/点击)、Safari 或 Chrome(浏览器自动化)、Script Editor 等
- 若终端未出现在列表中,先运行一次终端(哪怕只输
echo回车),系统会自动注册;或重启终端后刷新页面
必要时补充授予“辅助功能”权限
某些深度自动化操作(如监听键盘、强制激活窗口、无障碍控制)还需额外授权:
- 仍在「隐私与安全性」设置页,点击「辅助功能」
- 点击右下角锁图标解锁,输入管理员密码
- 点击「+」添加应用 → 导航至
/Applications/Utilities/Terminal.app并确认 - 确保 Terminal 已勾选;如使用 iTerm2 或其他终端替代品,需单独添加对应 App
脚本或命令行工具触发前的注意事项
即使权限已开,实际执行仍受上下文限制:
- 通过
osascript(AppleScript)或automator调用其他App时,必须确保目标App本身也已在「自动化」列表中被终端选中 - 若脚本由
launchd后台启动,它默认无GUI会话权限——应改用交互式shell或配置StandardIO等参数适配 - 部分App(如 Zoom、Slack)会主动阻止自动化,需在其自身设置中另行开启“允许脚本控制”选项
- macOS Sequoia(15.x)起加强了TCC沙盒管控,首次调用新接口时可能弹出一次性确认对话框,无法跳过
验证与排错小技巧
快速确认是否生效:
- 在终端中运行:
osascript -e 'tell app "Finder" to activate'—— 若Finder成功唤起,说明基础自动化权限已通 - 若报错
execution error: AppleEvent handler failed.,大概率是「自动化」里没给Terminal授权Finder - 检查权限状态可执行:
tccutil reset Automation com.apple.Terminal(重置后需重新勾选) - 日志排查:
log show --predicate 'subsystem == "com.apple.TCC" && eventMessage contains "Terminal"' --last 1h











