Shell任务完成的低吼通知


12

(特定于OSX)

我和其他许多人一样,经常发现自己在shell中启动了需要一两分钟才能完成的进程(例如,大型svn commit)。在此期间,我经常alt标签并刷新reddit / slashdot / wikipedia /其他内容。设置一些可以在shell进程结束时发布咆哮通知的东西真是太好了。

在我理想的世界中,它会像这样工作:“如果某个进程刚刚从终端中打开的选项卡退出,请发出咆哮声通知。”

其他人有这样的设置吗?


1
请注意,咆哮声只会在您仍然坐在屏幕上时通知您。对于较长的程序,请使用“ say”命令来获取音频提示它已完成。

@mankoff:您可以在其中配置growlnotify应用程序通知设置,Growl.prefPane以包括音频通知声音。但是,它不可更改,具体取决于您执行的命令say。但这并不那么令人毛骨悚然。
丹尼尔·贝克

Answers:


11

您可以安装growlnotify来做到这一点。

$ ./some_program && growlnotify Title -m Message

当然,在执行命令之前,您需要考虑一下这一点。替代方案(尽管我不知道如何实现)将是每个命令的低吼通知,这会很烦人。


为了简化用在您的用例中的grolnotify,请编辑~/bash_profile并添加以下内容:

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

现在您可以简单地long your_command(类似于sudo)。Ctrl-A如果您(像我一样)始终先输入实际命令,然后再添加前缀,则将光标置于行的开头。

不幸的是,我的bash-fu不足以将命令添加到growlnotify消息中


每个@mankoff对这个答案的评论:

您只需在命令运行时键入内容,它便会在以后执行。我为我创建了以下函数:

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

用作gn svn


2
您无需在命令前考虑它。如果在运行时意识到要在完成时收到通知,则只需键入“ gn foo”(或“ say done”,以获取音频提示),然后按Enter,该命令将在当前命令完成时运行。

您对自动执行此操作发表评论...使用PS1或其他东西触摸时间戳。使用PS2验证自PS1触摸它以来的时间。如果已经> n秒,则运行growlnotify。现在,它并不令人讨厌,因为并不是每个命令都发生这种情况。

@mankoff是的。因此,减少打字的简单功能就足够了。
丹尼尔·贝克

@mankoff PS2?这不只是继续提示吗?它没有为每条输出线添加前缀。
丹尼尔·贝克

PS1 / PS2只是我想开始实现这一目标的猜测。也许整个事情都可以嵌入到PS1中。也许有完全不同的方法来进行通用的每命令命令咆哮。

2

您需要的growlnotify是一个触发咆哮通知的CLI程序。您可以将其用作:

./script.sh;; growlnotify -m "done"

它还有一些旋钮可以使用,请使用growlnotify -h以获得更多信息


谢谢。我发现时也同时发表了评论。分号比&&更有意义。
ezrock 2010年

1
@ezrock我想一个可以使用&&||有成功和失败国家之间不同的消息,但如果一个人在一个消息只关心所显示的命令执行后,则;;是万无一失的。=)
roguesys 2010年

2

修改Daniel Beck的答案,如果您进行了一些细微的更改,它将非常好。

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

然后,当您运行“长时间svn结束”时,您会看到消息“ svn结束已完成”。

如果您同时运行许多耗时的Shell脚本,则非常好。


2

现在OSX 10.8和更高版本具有本机通知,这就是我通过terminal-notifier实现相同目标的方式:

  1. 安装brew
  2. $ brew install terminal-notifier
  3. 将此添加到~/.bash_profile

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }

确保您使用了个人资料作为来源. ~/.bash_profile(以后的终端会话不需要),因为您的个人资料是在创建会话时自动提供的。

使用您喜欢的命令进行测试,然后进行函数调用。

ls ; gn

terminal-notifier的参数可以进行一些改进,但是快速尝试抓住先前的命令传递给函数并没有成功,这为我提供了我需要的所有功能。即,添加;gn以在任何长期运行的过程结束时获得通知。



1

这是一种针对“长期运行”进程自动调用它的方法:http : //hints.macworld.com/article.php?story=20071009124425468

它挂接到$PROMPT_COMMAND并通知过程完成的时间超过10秒。您可能需要对其进行调整以适合您自己的环境和工作流(例如,忽略完成less或编辑器调用),但是它似乎开箱即用地工作得很好。


我自己还没有尝试过,但是完全自动化的方法听起来确实很吸引人。这里的所有其他解决方案都需要事先知道该命令将长期运行,并且记住要触发该脚本(即ls; growlnotify)。我喜欢不需要手动触发的想法。
ezrock 2014年

0

我只是戳了一下,发现了一个简单的方法。它比我希望的要手动一些,但是这里有。

  1. 安装growlnotify(位于Growl的安装下载文件的extras文件夹中)1。
  2. 将< && growlnotify -m "Message"> 附加到一个漫长的过程。

方法现在适合我,但是我可以做得更好,methinks。


0

没有第三方软件的OSX 10.9+解决方案:

在OSX 10.9及更高版本中,可以使用AppleScript命令display notification从终端显示咆哮声,如下所示:

osascript -e 'display notification with title "Process Completed."'

如果您不想每次都输入所有内容,则可以使用alias

alias growl='osascript -e "display notification with title \"Process Completed.\""'

例:

long-running-script.sh; growl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.