Mac原生不支持进入目录自动开启勿扰,但可通过fswatch监听目录+脚本触发、launchd开机常驻或zsh别名三种方案实现;推荐别名法最简单可靠。

Mac系统原生不支持“进入某个特定目录时自动开启勿扰模式”,因为目录访问行为本身不触发系统级事件,通知中心与文件系统无监听接口。但可通过终端命令+文件监视工具组合实现近似效果:当检测到用户 cd 进入指定路径(如 ~/Projects/urgent-deadline),立即执行勿扰开启指令。
用 fswatch 监听目录并触发勿扰
这需要安装轻量级文件系统监视工具 fswatch,它能捕获 shell 中的 cd 行为间接触发的 .zshrc 或 PWD 变更事件。
第一步:打开“终端”,运行以下命令安装 fswatch(需已安装 Homebrew):
brew install fswatch
第二步:创建监听脚本,例如保存为 ~/bin/watch-urgent-dir.sh:
#!/bin/zsh
if [[ "$PWD" == "$HOME/Projects/urgent-deadline" ]]; then
defaults write com.apple.notificationcenterui doNotDisturb -boolean true
killall NotificationCenter
fi
第三步:赋予执行权限:
chmod +x ~/bin/watch-urgent-dir.sh
第四步:启动后台监听(替换为你的真实目录路径):
fswatch -o "$HOME/Projects/urgent-deadline" | while read _; do ~/bin/watch-urgent-dir.sh; done &
注意:该命令仅在当前终端会话中生效;若要开机自启,需将第四步命令写入 ~/.zshrc 末尾,并加 &>/dev/null & 静默运行——但【每次打开新终端都会重复启动一个监听进程,可能堆积】,建议改用 launchd 管理。
用 launchd 实现开机常驻监听
此方法确保监听服务随系统启动、单实例运行、崩溃后自动重启,适合生产级使用。
方法一:生成 plist 配置文件
在 ~/Library/LaunchAgents/ 下新建文件 com.user.urgent-dir-dnd.plist,内容如下:
方法二:加载并启用服务
执行命令:
launchctl load ~/Library/LaunchAgents/com.user.urgent-dir-dnd.plist
方法三:验证是否生效
cd ~/Projects/urgent-deadline → 观察菜单栏右上角是否出现月牙图标;若无反应,检查 plist 中路径是否含空格或特殊字符——【路径必须全英文、无空格,否则 WatchPaths 失效】。
替代方案:用别名简化手动开启
如果监听方案过于复杂,且你只在少数几个关键目录工作,直接绑定 cd 别名更可靠、零依赖。
编辑 ~/.zshrc,添加以下两行(以 ~/Projects/urgent-deadline 为例):
alias cdurgent='cd ~/Projects/urgent-deadline && defaults write com.apple.notificationcenterui doNotDisturb -boolean true && killall NotificationCenter'
alias cdnormal='defaults write com.apple.notificationcenterui doNotDisturb -boolean false && killall NotificationCenter'
保存后运行 source ~/.zshrc 加载配置。
之后只需在终端输入 cdurgent,即可一键进入目录并开启勿扰;输入 cdnormal 即关闭。
这一步操作起来很简单,直接敲命令就行,且完全绕过文件监听的稳定性问题。

















