如何在作业/流程结束时触发通知?

Utk*_*nha 96 unix notifications command-line process

我工作的地方有需要很长时间才能执行的命令。

是否有命令/实用程序可用于在命令执行结束时通知我?它可能是一个弹出窗口,也可能是一个小声音。

slh*_*hck 140

通常,如果您运行命令之前知道这一点,则可以使用以下命令启动它:

command; command-after &
Run Code Online (Sandbox Code Playgroud)

这将在前一个命令退出command-after 执行(不管其退出代码如何)。该&会在后台启动它。

如果您关心成功或失败退出,请分别使用:

command && command-after-only-if-success &
command || command-after-only-if-fail &
Run Code Online (Sandbox Code Playgroud)

如果命令已经启动,您可以使用作业控制将其挂起,然后将其返回到前台,并fg与您的通知链接:

command
# enter Ctrl-z
fg ; command-after
Run Code Online (Sandbox Code Playgroud)

现在……你想在这之后做什么取决于你的环境。

  • 你为什么建议“command-after”应该异步运行?你的意思是说`(command; command-after) &`吗? (3认同)
  • 在 Mac OS X 上,您还可以使用命令行实用程序“say”。还有很多可用的声音,请检查“say -h”;) (2认同)

tri*_*nth 21

在类 Unix 系统上,您可以按响铃:

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

  • 与`tput bel`相同 (2认同)

小智 9

我为 MacOS X 创建了一个简单的工具,它就是这样做的。https://github.com/vikfroberg/brb

安装

$ npm install -g brb
Run Code Online (Sandbox Code Playgroud)

指示

$ sleep 3; brb
Run Code Online (Sandbox Code Playgroud)


小智 7

ntfy正是为此目的而写的。它是跨平台的,可以在长时间运行的命令完成时自动发送通知。

如果您有 Python pip(大多数 Linux 发行版和 MacOS 都有),以下是安装它并启用自动通知的方法:

$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
Run Code Online (Sandbox Code Playgroud)

http://ntfy.rtfd.io查看

除此之外,它还可以:

  • 当终端在前台时禁止自动通知(X11、iTerm2 和 Terminal.app 支持并默认启用)
  • 发送基于云的通知(Pushover、Pushbullet 和 XMPP)
  • 用于在进程结束时发送通知(不是前面提到的自动支持)
  • 手动发送通知(适用于脚本!)


mil*_*sky 6

要获得声音通知,您可以使用spd-say "Some text". 例子:

some-command; spd-say "Yo"
Run Code Online (Sandbox Code Playgroud)

更新

如果你没有预先安装语音调度器,你可以通过以下方式安装它:

sudo apt-get install speech-dispatcher
Run Code Online (Sandbox Code Playgroud)

  • 它只是一个文本到语音的应用程序。您可以通过“sudo apt-get install speech-dispatcher”安装它。或者使用替代方案 http://askubuntu.com/questions/501910/how-to-text-to-speech-output-using-command-line (2认同)

小智 5

尽管其他答案已经涵盖了获取已完成工作通知的大部分方法,但由于您以以下格式提出问题,我想给我两分钱:

我工作的地方有一些需要很长时间才能执行的命令。

我也有同样的问题。有时某些东西可以运行 15 分钟。

我的 .bashrc 中有以下函数:

# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
    curl -s -F "token=PUSHOVER_TOKEN" \
    -F "user=PUSHOVER_USER" \
    -F "title=terminal" \
    -F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}
Run Code Online (Sandbox Code Playgroud)

这使用 Pushover 应用程序将通知推送到我的手机。这样,我可以去吃午饭或参加会议,并且在离开之前仍然可以收到有关我在计算机上启动的作业的通知。

我按以下方式使用它:

command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("
Run Code Online (Sandbox Code Playgroud)

因此,如果该命令返回正确的退出代码,则将执行第一次推送。出现错误时,将执行第二个。

Ofc 您需要在 Pushover 创建一个用户,并注册一个应用程序以从 https://pushover.net/发送通知

希望这有帮助!