系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

osascript

执行 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'

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 第一次让脚本控制 Safari 时弹出了授权框,拒绝后报错 -1743,如何恢复?
  2. 为什么在 cron 里能跑通的 AppleScript,到了 launchd 就失败?
  3. tell application "X" 有什么副作用?只想查询状态时怎么避免?
答案
  1. 到“系统设置 > 隐私与安全性 > 自动化”勾选终端和对应应用,然后重开终端再运行。
  2. 图形自动化需要已登录的 GUI 会话和对应上下文,launchd 系统任务没有;改用用户 LaunchAgent 或 launchctl asuser。
  3. 应用未运行时会把它启动;先判断 application "X" is running,或使用不会激活应用的查询方式。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令