执行 AppleScript/JXA 脚本,驱动 macOS 应用完成自动化。
osascript 把脚本发给对应的脚本运行时:默认 AppleScript,-l JavaScript 使用 JXA;-e 直接给一行语句,也可以传入 .scpt/.applescript 文件并在后面附加参数。它常用来发通知、读取应用状态、模拟菜单和按键,或把重复的图形操作自动化。
边界:脚本能做什么取决于目标应用是否支持 Apple Events,以及系统隐私授权。首次控制某个应用会弹“自动化”授权,拒绝后返回 -1743;模拟按键、读取界面元素还需要给终端或脚本进程“辅助功能”权限。通过 SSH 或 launchd 运行时没有图形会话,很多操作会失败,需要用户已登录并在正确的 GUI 上下文。
# 1. 发一条系统通知,适合长任务结束时提醒
% osascript -e 'display notification "备份完成" with title "Time Machine"'
# 2. 读取 Finder 信息,不会修改任何文件
% osascript -e 'tell application "Finder" to get name of startup disk'
# 3. 取 Safari 当前标签页 URL,需要“自动化”授权
% osascript -e 'tell application "Safari" to get URL of current tab of front window'
# 4. 用 JXA 调用同一个应用,语法更接近 JavaScript
% osascript -l JavaScript -e 'Application("Finder").name()'
# 5. 模拟按键,需要“辅助功能”授权;先确认目标应用在前台
% osascript -e 'tell application "System Events" to keystroke "l" using command down'
# 6. 纯计算和返回字符串,适合验证脚本运行时是否正常
% osascript -e 'return 6 * 7'
-1743 是自动化权限被拒绝;到“系统设置 > 隐私与安全性 > 自动化”里勾选对应应用,改完重开终端。-1719 或“不允许发送按键”。tell application "X" 会在应用未运行时把它启动;只想查询时先判断 application "X" is running,避免意外拉起应用。do shell script 以当前用户执行,加 with administrator privileges 会弹窗提权并可以 root 运行;不要把密码写进脚本,脚本源码对同用户可读。defaults — 修改应用偏好,常与脚本配合。pbcopy、pbpaste — 在脚本中读写剪贴板。screencapture — 脚本化截图。launchctl — 让自动化脚本在用户登录后运行。PowerShell — 对照 Windows 的脚本自动化入口。合上页面,先回答,再展开对照。
tell application "X" 有什么副作用?只想查询状态时怎么避免?launchctl asuser。application "X" is running,或使用不会激活应用的查询方式。
小程序版
微信扫码,随时查命令