长时间运行 shell 脚本后发出警报

Tgr*_*Tgr 9 bash notifications

当我等待缓慢的命令(例如对大型数据库的操作)时,我开始做其他事情,并且经常很长时间没有注意到它已经完成,浪费了宝贵的时间。我正在寻找一种让 shell 提醒我的方法(我的意思是,运行一些我可以确定的自定义命令)当一个已运行超过 X 秒的命令完成并且我返回提示时。

我正在使用 Bash,但其他 shell 的解决方案也会很有趣。

Ste*_*del 12

这个脚本,如果放在你的 中.bashrc,将在长时间执行命令后提示返回时执行你喜欢的任何命令 --gt以秒为单位自定义“长时间”(在 之后),并且在同一行的大括号内,你可以执行你喜欢的任何命令。您甚至可以向自己发送一封电子邮件,其中包含发生这种情况的主机以及上次执行的命令及其状态代码。

beep_if_long_time_past() {
    LAST_COMMAND_DURATION=$(($(date +%s) - ${LAST_COMMAND_TIME}))
    [[ ${LAST_COMMAND_DURATION} -gt 60 ]] && { echo "花了很长时间,不是吗?" ; notify-send "我在 ${LAST_COMMAND_DURATION} 秒后完成了!"; }
    导出 LAST_COMMAND_TIME=
}

export PROMPT_COMMAND=beep_if_long_time_past
陷阱 '[ -z ${LAST_COMMAND_TIME} ] && export LAST_COMMAND_TIME=$(date +%s)' DEBUG


Tgr*_*Tgr 6

slowcommand; echo -e "\a"
Run Code Online (Sandbox Code Playgroud)

可以,但是每次都手动追加通知命令很丑,不方便;也容易忘记。(wait本答案所述,可以将通知附加到已运行的进程,但这更难看。)