題 Shell任務完成的低估通知


(特定OSX)

我和其他許多人一樣,經常發現自己在shell中啟動了一兩分鐘來完成(例如一個大的svn提交)。在那段時間裡,我經常使用alt-tab並刷新reddit / slashdot / wikipedia /等等。設置一個在shell進程結束時發布growl通知的東西會很棒。

在我理想的世界中,它會像這樣工作:“如果一個進程剛剛從終端中打開的選項卡中退出,則發布一個咆哮通知。”

其他人有這樣的設置嗎?


12
2017-11-02 18:47


起源


請注意,咆哮只會在您仍然坐在屏幕上時通知您。對於較長的程序,請使用“say”命令獲取已完成的音頻提示。
@mankoff:你可以配置 growlnotify 應用程序通知設置 Growl.prefPane 包括音頻通知聲音。但是,它不會根據您執行的命令而改變,例如 say 將會。但它不那麼令人毛骨悚然。 - Daniel Beck♦


答案:


你可以安裝 growlnotify 去做這個。

$ ./some_program && growlnotify Title -m Message

當然,在執行命令之前,您需要考慮這一點。替代方案(我不知道如何實現這一點)將是每個命令的Growl通知,這將是非常煩人的。


要簡化使用growlnotify的用例,請編輯 ~/bash_profile 並添加以下內容:

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

現在你可以簡單 long your_command (相近 sudo)。 Ctrl-A 將光標定位在行的開頭,如果您(像我一樣)總是首先鍵入實際命令,然後需要添加前綴。

遺憾的是,我的bash-fu不足以將命令添加到 growlnotify 信息


per @ mankoff對這個答案的評論:

您只需在命令運行時鍵入,然後執行即可執行。我為我創建了以下功能:

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

用於 gn svn


11
2017-11-02 18:58



在命令之前你不需要考慮它。如果在運行時,您意識到要在完成後收到通知,只需輸入“gn foo”(或“完成”,對於音頻提示),按回車鍵,當前一個命令完成時該命令將運行。
重新評論自動執行此操作...使用PS1或其他東西來觸摸時間戳。使用PS2驗證自PS1觸摸它多久以來。如果已經> n秒,則運行growlnotify。現在它並不煩人,因為它不會發生在每個命令中。
@mankoff真的。因此,減少打字的簡單功能就足夠了。 - Daniel Beck♦
@mankoff PS2?這不僅僅是延續提示嗎?它沒有為每個輸出行添加前綴..? - Daniel Beck♦
PS1 / PS2只是猜測,如果我想實現它,我會開始尋找它。也許整個事情都可以嵌入到PS1中。也許有完全不同的方法來為每個命令設置一個通用的增長。


你需要的是什麼 growlnotify 這是一個觸發咆哮通知的CLI程序。你可以用它作為:

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

它還有一些你可以玩的旋鈕,使用 growlnotify -h 了解更多信息


2
2017-11-02 18:59



謝謝。當我發現那個時,我只是在同一時間發表評論。分號比&&更有意義。 - ezrock
@ezrock我認為可以使用 && 和 || 在成功和失敗狀態之間有不同的消息,但如果一個人只對命令執行後顯示的消息感興趣,那麼 ;; 是萬無一失的。 =) - roguesys


修改丹尼爾貝克的答案,如果你做這個微小的改變,它會非常好。

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

然後,當你運行'long svn up'時,你會看到消息'svn up'。

如果您同時運行許多耗時的shell腳本,那將非常好。


2
2018-03-16 14:41





現在,OSX 10.8及更高版本具有本機通知,這就是我通過實現相同目標的方式 終端通知

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

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

確保您使用了自己的個人資料 . ~/.bash_profile (對於將來的終端會話不是必需的),因為您的配置文件是在創建會話時自動獲取的。

使用您喜歡的命令進行測試,然後進行函數調用。

ls ; gn

終結通知程序的參數可以有所改進,但是快速嘗試抓取前一個命令傳遞給函數並不成功,這就獲得了我需要的所有功能。即,添加 ;gn 在任何長時間運行的過程結束時收到通知。


2
2018-06-17 12:32





使用 growlnotify

ls && growlnotify -H localhost -m "message"

1
2017-11-02 19:01





這是一種為“長時間運行”進程自動調用它的方法: http://hints.macworld.com/article.php?story=20071009124425468

它掛進了 $PROMPT_COMMAND 並通知完成過程需要超過10秒才能完成。您可能需要調整它以適合您自己的環境和工作流程(例如,忽略完成 less或編輯器調用),但它似乎開箱即用。


1
2017-08-06 03:07



我自己沒有嘗試過,但完全自動化的方法聽起來很吸引人。這裡的所有其他解決方案都需要事先知道命令將長時間運行並記住觸發腳本(即ls; growlnotify)。我喜歡不需要手動觸發它的想法。 - ezrock


我只是捅了一些,發現了一個簡單的方法。它比我想要的手動更多,但是這裡有。

  1. 安裝growlnotify(它位於Growl安裝下載的extras文件夾中)1。
  2. 追加<&& growlnotify -m "Message">到一個漫長的過程。

這對我來說現在很有用,但我可以做得更好。


0
2017-11-02 19:00





沒有第三方軟件的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

0
2018-01-13 21:29