applescript 通过 do shell script 调用 defaults 命令读写 macos 偏好设置,需配合 killall 重载进程(如 finder、dock)、try 错误处理、值校验防重复,并可联动 system preferences 打开对应面板。
applescript 本身不能直接读写 macos 系统偏好设置(defaults 数据库),但它能安全、可靠地调用系统命令完成这项任务——核心是通过 do shell script 执行 defaults read 和 defaults write,并配合权限校验与错误处理。
读取系统偏好设置值
使用 defaults read 获取任意 domain(如 NSGlobalDomain、com.apple.finder)下的键值。AppleScript 需将路径转为 POSIX 格式,并处理可能的执行失败:
- 读取 Finder 是否显示隐藏文件:
do shell script "defaults read com.apple.finder AppleShowAllFiles" - 读取全局键盘重复延迟:
do shell script "defaults read NSGlobalDomain KeyRepeat" - 若键不存在或权限不足,脚本会报错,建议用
try包裹并提示用户(例如“该设置未配置”或“需重启应用生效”)
写入并生效系统偏好设置
写入后必须触发重载才能让 GUI 应用感知变更。常见组合操作如下:
- 启用 Dock 自动隐藏:
do shell script "defaults write com.apple.dock autohide -bool true && killall Dock" - 禁用 Finder 标题栏阴影:
do shell script "defaults write com.apple.finder DisableShadow -bool true && killall Finder" - 对某些设置(如屏幕保护程序密码要求),还需额外调用
defaults write ... -int 1并配合killall cfprefsd刷新偏好服务
安全写入与防重复配置
避免多次写入导致配置混乱,可在写入前检查当前值:
- 先读取:
set currVal to do shell script "defaults read com.apple.screensaver idleTime 2>/dev/null || echo 0" - 仅当不等于目标值时才写入:
if currVal is "0" then do shell script "defaults write com.apple.screensaver idleTime -int 600" - 敏感设置(如
com.apple.universalaccess)需用户已授权辅助功能权限,否则defaults write可能静默失败
与系统偏好设置界面联动
AppleScript 可打开对应偏好设置面板,辅助用户确认或手动调整:
- 跳转到“安全性与隐私”→“隐私”→“辅助功能”:
tell application "System Preferences" to reveal pane "com.apple.preference.security" - 打开“键盘”偏好设置:
tell application "System Preferences" to reveal anchor "keyboardShortcuts" of pane "com.apple.preference.keyboard" - 注意:macOS Sequoia 起部分面板锚点名称有更新,建议用
System Preferences的 AppleScript 词典验证实际 anchor 名











