mac可通过快捷指令、脚本嵌入或launchd三种方式实现脚本运行时自动启停勿扰模式:快捷指令监听脚本触发并延时操作最稳定;脚本内嵌defaults或applescript命令效率最高;launchd守护进程适合路径不固定场景,每5秒轮询进程名控制勿扰开关。

你希望Mac在执行某个Shell脚本(比如自动化备份、批量渲染或数据清洗)期间自动屏蔽所有通知干扰,避免弹窗打断长时间运行任务,又不想手动开关勿扰模式——系统原生不支持“脚本触发勿扰”,但可通过终端命令+快捷指令组合实现精准联动。
用快捷指令监听脚本执行并触发勿扰
这是最稳定、无需修改脚本本身的方式,适用于任何可执行文件(.sh/.py/.command),且能自动恢复勿扰状态。
第一步:打开“快捷指令”App → 切换到“自动化”标签页 → 点击右上角“+”号 → 选择“创建个人自动化”。
第二步:触发器类型选“运行脚本”,点击“脚本”右侧的“…”,在弹出窗口中点击“添加操作” → 搜索“运行shell脚本” → 添加该操作 → 在脚本框中粘贴你的目标脚本路径,例如:/Users/you/bin/backup.sh。注意:路径必须是绝对路径,且脚本需有执行权限(chmod +x /path/to/script.sh)。
第三步:点击“下一步”,添加第一个操作:搜索“设置勿扰模式” → 选择该操作 → 设定为“开启”。
第四步:再次点击“添加操作” → 搜索“等待” → 设定等待时间为“1秒”——【这一步必须加,否则脚本尚未真正启动,勿扰可能提前关闭】。
第五步:再添加一个操作:搜索“运行shell脚本” → 在脚本框中输入:sleep 2 && killall NotificationCenter && osascript -e 'tell application "System Events" to key code 49 using {option down, command down}'。这行命令确保脚本结束后强制刷新通知中心并模拟快捷键关闭勿扰——【若脚本运行时间不确定,此法不可靠;仅适用于已知时长或带结束标记的脚本】。
直接在脚本开头结尾嵌入终端命令
适合你完全掌控脚本内容、且不介意修改源码的场景,执行效率最高,无快捷指令延迟。
方法一:基础静音(仅关闭横幅与声音)
在你的脚本第一行下方插入:defaults write do_not_disturb 1 && killall NotificationCenter。
在脚本最后一行上方插入:defaults write do_not_disturb 0 && killall NotificationCenter。
注意:此命令仅修改系统偏好设置,不触发UI反馈,状态栏月牙图标不会变化,但通知确实被拦截——【若需视觉确认,必须配合AppleScript激活UI】。
方法二:完整模拟用户操作(含图标切换)
开头插入:osascript -e 'tell application "System Events" to key code 49 using {option down, command down}'。
结尾插入相同命令一次——这等效于按一次 Option+Command+D,系统会真实切换勿扰状态并显示提示框。
这一步操作起来很简单,直接复制粘贴就行,但要确保脚本以当前用户权限运行(不能用sudo启动,否则AppleScript无法控制GUI进程)。
用launchd守护进程监听进程名
适用于脚本名称固定、但路径不固定,或由其他程序调用启动的场景,比如你用Automator打包成App后双击运行。
① 创建plist配置文件:~/Library/LaunchAgents/com.user.dnd-on-script.plist。
② 文件内容填入:
③ 执行:launchctl load ~/Library/LaunchAgents/com.user.dnd-on-script.plist 启用监听。
④ 此配置每5秒检查一次系统中是否存在含“backup.sh”的进程,存在则开勿扰,不存在则关——【进程名匹配要足够唯一,避免误判,例如不要只写“python”,而应写“python3 /path/to/render.py”】。











