如何让alert命令自动在每个Bash命令执行后运行?
实现Bash命令执行后自动触发alert的方案
嘿,这个需求其实用Bash自带的特性就能轻松搞定,不用折腾复杂的shim工具~
核心方案:利用PROMPT_COMMAND环境变量
Bash里的PROMPT_COMMAND是个非常实用的变量——它会在每次命令执行完毕、准备显示下一个终端提示符之前自动运行你指定的命令,完全符合你“命令执行完成后触发alert”的需求。
临时生效(当前终端会话)
直接在终端里执行以下命令,之后所有前台命令执行完毕后都会自动调用alert:
PROMPT_COMMAND+="alert;"
永久生效(所有终端会话)
把上面的命令添加到你的Bash配置文件里(比如~/.bashrc或者~/.bash_profile),这样每次打开终端都会自动生效:
# 自动在每个前台命令执行后触发alert通知 PROMPT_COMMAND+="alert;"
补充:处理后台任务的情况
如果你还需要监控后台任务(比如./long_running_task &)的完成通知,上面的PROMPT_COMMAND就不太够用了——它会在后台任务被放到后台时立刻触发,而不是等任务真正完成。这种情况下可以用trap捕获CHLD信号:
trap 'alert' CHLD
不过要注意:这个方式会在每个后台子进程结束时都触发一次alert,如果同时运行多个后台任务,可能会收到多次通知,你可以根据自己的实际场景调整逻辑。
为什么之前的方案是命令前触发?
你提到之前找到的方案仅支持命令前运行,大概率是用了trap DEBUG——这个陷阱是在命令执行之前触发的,和你的需求刚好相反,所以用PROMPT_COMMAND才是正确的方向。
内容的提问来源于stack exchange,提问作者michaelsnowden
相关产品推荐
相关产品推荐

