題 如何在作業/流程結束時觸發通知?


我工作的地方有需要很長時間才能執行的命令。

是否有命令/實用程序可用於在命令執行結束時通知我?它可能是一個彈出窗口或者可能是一個小聲音。


83
2017-10-11 20:22


起源


@ slhck接受的答案很酷 - 我應該意識到這一點 fg;say "Job finished" 會工作。但是......有沒有什麼方法可以進一步實現自動化 - 即敲響鈴聲或在完成任何超過一分鐘閾值的工作後通知?是否有shell變量,例如在bash中,那是最後一個命令的經過時間? - Krazy Glew
...... 2個小時後,發現了 stackoverflow.com/questions/1862510/... ... put'(($ timer_show> $ {LONG_RUNTIME:-300}))&&在timer_stop中說“長時間運行的作業完成”...接著,添加到emacs的編譯命令......並通知我的Pebble手錶(我討厭電話通知) - Krazy Glew


答案:


一般來說,如果你知道這一點 之前 運行該命令,您可以啟動它:

command; command-after &

這將執行 command-after   上一個命令已退出(無論其退出代碼如何)。該 & 將在後台啟動它。

如果您關心成功或失敗退出,請分別使用:

command && command-after-only-if-success &
command || command-after-only-if-fail &

如果命令有 已經 開始你可以使用作業控制暫停它,然後將其返回到前台 fg 與您的通知鏈接:

command
# enter Ctrl-z
fg ; command-after

現在......在此之後你想做什麼取決於你的環境。

  • 任何系統, 您可以 “響”終端鈴。取決於你的確切系統真正有效(BSD與GNU Linux等),但是 tput bel 應該做。不過,我現在無法可靠地測試它。搜索“鈴聲”以了解更多信息。

  • Mac OS X.,您可以使用AppleScript彈出Finder對話框:

    osascript -e 'tell Application "Finder" to display dialog "Job finished" '
    

    你可以對它說些什麼:

    say "Job finished"
    

    或者您可以使用Mountain Lion的通知系統:

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • GNOMEzenity 可以顯示從命令行調用的GTK對話框。另請參閱此Stack Overflow問題: 從linux中的bash腳本顯示一個消息框。它可以通過您最喜歡的包管理器安裝。

    zenity --info --text="Job finished"
    
  • 一些發行版可能有 xmessage。特別是對於GTK環境,有 gxmessage

  • Ubuntu的 有一個你可以觸發的通知系統 notify-send

    notify-send "Job finished!"
    
  • KDE 使用 kdialog, 例如:

    kdialog --passivepopup 'Job finished'
    

114
2017-10-11 20:40



讓我知道您使用的命令!我還添加了一些其他選項。 - slhck
我正在擺弄notify-send和xmessage。他們兩個似乎都很有趣!這是我正在尋找的下一件事 - superuser.com/questions/345463/... - Utkarsh Sinha
在Mac OS X上,您還可以使用命令行實用程序“說”。還有很多聲音,請查看“說-h”;) - trinth
為什麼你建議“命令後”應該異步運行?你的意思是說 (command; command-after) &? - G-Man
此解決方案適用於Konsole用戶,並不是一個完美的解決方案,因為它依賴於您的命令要么是完整的要么是冗長的,要么完全無聲(沒有輸出),直到它完成此時提示返回。然而,這正是我尋求幫助時所需要的。您可以配置Konsole以彈出通知,播放聲音等。然後您必須打開shell監視。如果你的命令輸出一堆東西直到它完成,則監視靜默,如果它沒有打印出任何東西然後shell返回,則靜默。 - MrMas


在類似unix的系統上,你可以敲響鐘聲:

echo -e "\a"

19
2017-10-10 18:29



除了mac上的消息通知之外,這非常有用 - Sirens
與...一樣 tput bel - Dwight Spencer


我為MacOS X創建了一個簡單的工具,就是這樣做的。 https://github.com/vikfroberg/brb

安裝

$ npm install -g brb

說明

$ sleep 3; brb

8
2018-06-08 10:43





我剛剛開始使用 notifu 用於來自Cygwin的桌面通知。它是Windows的命令行通知應用程序。

例:

ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."

4
2017-09-13 07:21





要獲得聲音通知,您可以使用 spd-say "Some text"。例:

some-command; spd-say "Yo"

4
2017-12-15 17:54



什麼OS?我在Mac或Ubuntu上看不到它 - Edward Falk
@EdwardFalk我正在使用Ubuntu - milkovsky
好吧,我使用的是舊版本,所以可能是新版本。 - Edward Falk
它只是一個文本轉語音應用程序。你可以通過安裝它 sudo apt-get install speech-dispatcher。或使用替代品 askubuntu.com/questions/501910/... - milkovsky
啊,默認沒安裝?我應該考慮一下。謝謝你的鏈接。 - Edward Falk


對於Linux,有一個很好的技巧可以自動執行此操作,而無需每次都輸入通知命令。

首先安裝自動鍵。這有助於為不同的擊鍵定義動作。

sudo apt-get install autokey-gtk

現在,在autokey中定義一個新短語,並將熱鍵分配為Alt + Enter。添加這個短語:

; notify-send "Job finished!" &
  #

請注意,第一行之後的新行很重要。

另外,添加一個窗口過濾器。我用guake和終端。包括您使用的任何其他終端。

.*(guake)|(Terminal).*

你完成了!!

現在,每當您需要獲取命令通知時,請使用Alt + Enter而不是Enter / Return運行它。

資源: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html


3
2017-12-27 12:39





雖然其他答案已經涵蓋了在完成的工作上獲得通知的大多數方法,但我想給出我的兩分錢,因為您以下列格式提出了問題:

我工作的地方有需要很長時間才能執行的命令。

我也有同樣的問題。有時可以運行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
}

這會使用Pushover應用程序將通知推送到我的手機。 通過這種方式,我可以去吃午餐或參加會議,但在我離開之前,我仍然會收到我在計算機上開始的工作的通知。

我以下列方式使用它:

command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("

因此,如果命令返回正確的退出代碼,則將執行第一次推送。如果出錯,第二個將被執行。

你需要在Pushover創建一個用戶,並註冊一個應用程序來發送通知 https://pushover.net/

希望這有幫助!


3
2018-06-23 11:15



好的,所以“pushover”是一個Web服務,它向安裝了“pushover”應用程序的手機發送通知? - Edward Falk
它是一個發送通知的Web服務 手機,電腦和一切現代網絡瀏覽器。因此,您可以在PC和手機上打開pushover,並在所有設備上收到通知。整潔,對吧? :-) - Thatkookooguy