如何在 OS X 中从远程终端触发通知

如何在 OS X 中从远程终端触发通知

我正在远程 shell 上运行一个耗时较长的进程。我想在该进程完成时触发通知。这个答案还不够,因为长命令在远程服务器上,所以它无法调用终端通知程序。

我可以通过使用 iTerm2 触发器来接近我想要的结果。例如,如果我在远程服务器上运行以下命令并为 __FINISHED__ 设置 iTerm2 触发器:

./long_process && echo "\__FINISHED__"

它有一个不良特性,每次我在编辑器或代码中滚动回到此命令(我在 emacs shell 中运行代码)时,都会触发通知。

一种解决方案可能是 iTerm2 可以识别某种文本通知,但它不会出现在 emacs 回滚缓冲区中。

答案1

您没有指定想要哪种通知,也没有指定远程服务器运行的操作系统,因此我必须在此做出一些假设。我假设您并不真正关心通知类型,只要您收到通知并且远程服务器运行某种 *nix 即可。

  1. 给自己发一封电子邮件。如果sendmail服务器上配置了,你可以这样做

    ./long_process && echo "Job done" | sendmail [email protected]
    
  2. ssh 返回到您的本地计算机(假设这是可能的)并让它与您通信。请参阅这里了解更多让 OSX 发出哔哔声的酷方法。

    ./long_process && ssh [email protected] say "Yo! All done"
    

    或者

    ./long_process && ssh [email protected] terminal-notifier -message "Job finished!" -title "Info"
    

    如果您从动态 IP 连接您已配置路由器,以便可以 ssh 到该动态 IP,您可以执行以下操作(假设您当前仅从远程机器连接):

    ip=$(who | grep $USER | perl -lne 's/\\((.+?)\\)\s*$//; print "$1"' | tail -n 1) &&
     ./long_process && ssh you@$ip terminal-notifier -message "Job finished!" -title "Info"
    

    您可以在正常方式。它不应该受到动态 IP 的影响。一旦你这样做了,上面的代码就会起作用。

  3. 使用推倒并向您的 Android 或 iOS 设备发送通知(如果有)

    ./long_process && pushover.pl "All done"
    

答案2

您可以在远程终端 echo听到铃声:\a./long_process ; echo -e '\a'

一些终端仿真器会播放某种声音并可能显示通知。特别是 iTerm2,如果进程的选项卡没有获得焦点,它会显示通知并播放声音。

另外,请注意我曾经;将命令分开。这样,即使命令返回非零状态,您也会收到通知,而&&只有命令成功时才会运行。

答案3

有一种非常简单的方法可以让 iTerm2 在 dock 中弹跳,直到你切换到它。这很棒。要使用它,你只需要使用 iTerm2 并能够在你通过 ssh 连接到的主机上安装软件。操作方法如下,

  1. 通过 SSH 进入主机。
  2. 安装 iTerm2 的 Shell Integration。在 Mac 版本的 iTerm2 上,您可以通过选择 iTerm2->Install Shell Integration 来执行此操作。有关如何安装的更多信息这里如果你需要它。
  3. 执行你的命令
./long_process && it2attention start
  1. 您也可以尝试
./long_process && it2attention fireworks

相关内容