web-dev-qa-db-ja.com

ジョブ/プロセスが終了したときにどのように通知をトリガーできますか?

私が働いている場所は、実行に時間がかかるコマンドがあります。

コマンドの実行が終了したときに通知するために使用できるコマンド/ユーティリティはありますか?それはポップアップウィンドウか多分少し音かもしれません。

85
Utkarsh Sinha

一般に、コマンドを実行する前にを知っている場合は、次のコマンドで開始できます。

command; command-after &

これにより、command-after after が実行されます(終了コードに関係なく)前のコマンドが終了しました。 &はバックグラウンドで開始します。

成功または失敗の終了を気にする場合は、それぞれ以下を使用します。

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

コマンドが already を開始した場合、ジョブ制御を使用してコマンドを一時停止し、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 があります。

  • Desktop Notifications Specification を実装するデスクトップ環境では、UbuntuおよびGNOMEnotify-sendlibnotifyの一部)でトリガーできる通知システムがあります。

    notify-send "Job finished!"
    
  • KDEkdialogを使用します。例:

    kdialog --passivepopup 'Job finished'
    
119
slhck

UNIX風のシステムでは、可聴ベルを鳴らすことができます。

echo -e "\a"
20
trinth

私はMacOS X用に、これを正確に行う簡単なツールを作成しました。 https://github.com/vikfroberg/brb

インストール

$ npm install -g brb

説明書

$ sleep 3; brb
8
Viktor Fröberg

適切な通知を受け取るには、spd-say "Some text"を使用できます。例:

some-command; spd-say "Yo"
5
milkovsky

Cygwinからのデスクトップ通知に notifu を使い始めました。 Windows用のコマンドライン通知アプリです。

例:

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

私は正確にこの目的のためにntfyを書きました。これはcross-platformであり、長時間実行されるコマンドが終了したときに自動的にに通知を送信できます。

あなたがPythonのpip(ほとんどのLinuxディストリビューションとMacOSがそれを持っている)を持っているなら、ここにそれをインストールして自動通知を有効にする方法があります:

$ Sudo pip install ntfy
$ echo 'eval "$(ntfy Shell-integration)"' >> ~/.bashrc
$ # restart your Shell

http://ntfy.rtfd.io でチェックしてください。

それに加えて、それはまたすることができます:

  • 端末がフォアグラウンドにあるときに自動通知を抑制します(X11、iTerm2、Terminal.appがデフォルトでサポートされ有効になっています)。
  • クラウドベースの通知を送信する(Pushover、Pushbullet、およびXMPP)
  • プロセスが終了したときに通知を送信するために使用されます(前述の自動サポートではありません)
  • 手動で通知を送信する(スクリプトでの使用に適しています)
4
Daniel Schep

Linuxでは、毎回通知用のコマンドを入力しなくても自動的にこれを実行するための巧妙なトリックがあります。

最初にautokeyをインストールしてください。これは、異なるキーストロークに対するアクションを定義するのに役立ちます。

Sudo apt-get install autokey-gtk

それでは、autokeyで新しいフレーズを定義して、ホットキーをAlt + Enterとして割り当てます。このフレーズを追加:

; notify-send "Job finished!" &
  #

最初の行の後の新しい行は重要です。

また、ウィンドウフィルタを追加してください。私はguakeとterminalを使います。他に使用している端末をすべて含めます。

.*(guake)|(Terminal).*

これで終わりです!

これで、コマンドの通知を受け取る必要があるたびに、Enter/ReturnではなくAlt + Enterを使用してコマンドを実行できます。

出典: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html

3
shivams

他の回答では、完成した仕事に関する通知を受け取る方法のほとんどがすでにカバーされていますが、あなたが以下のフォーマットであなたの質問をしたので私は2セントを与えたいと思います。

私が働いている場所は、実行に時間がかかるコマンドがあります。

私は同じ問題を抱えています。時には何かが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 :-("

そのため、コマンドが正しい終了コードを返した場合、最初のPushが実行されます。エラーが発生した場合、2番目のものが実行されます。

プッシュオーバーでユーザーを作成し、通知を送信するアプリを登録する必要があります https://pushover.net/

これが助けになることを願っています!

3
Thatkookooguy

それでこれはかなり遅くなります、しかし私はこれをするためにシステムを使い始めました:私は後でそれに渡されるどんなコマンドでも実行するbashスクリプトを持っています

http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/

#!/bin/bash


# file location : /usr/bin/n

set +e


# $@ executes whatever command is typed after the filename

$@


notify-send "Task Completed"

それから私は単にnを前に付ける

n bundle install
n npm install
1

対話型シェルとしてcshまたはtcshを使用している場合は、notifyコマンドを使用できます。

% long-running-command &
[1] 14431
% notify %1
% 
(later, when the command finishes)
[1]    Done                          long-running-command

set -bまたはset -o notifyを使ってbashで同様の効果を得ることができます。

メッセージが表示されるだけなので、これはおそらくあなたの要求を満たしていません。私はそれがウィンドウをポップアップしたりベルを鳴らすように設定できるとは思わない。

1
Keith Thompson

何年も前にこのスレッドに気付いたことを願います。私の解決策はslhckのものと基本的に同じでしたが、私はスクリプトを書きました。私はいつも使っています。共有するにはここに投稿してください。

#!/bin/bash

msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi

echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
  unset WINDOWID
  exec zenity --info --text="$msg"
Elif [ -x /usr/bin/xmessage ]; then
  exec xmessage -nearmouse "$msg"
Elif [ -x /usr/bin/osascript ]; then
  if ! $quiet; then say "done" &; fi
  osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
  echo $msg
fi

ちょっとした説明:文字列"\x1b]0;$msg\a"は、メッセージが実行されたウィンドウのタイトルバーにメッセージを入れるためのANSIエスケープシーケンスです。メッセージがどのウィンドウから来たのかを確認できると便利なことがあります。

1
Edward Falk

'awk'があるシステムで試してください

awk 'BEGIN{ print "\a" }'

私のために働く唯一の人でした。

1
Krzysztof

npmを使用している場合、 ノード通知クロスプラットフォームソリューションを提供します。

notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "

プレビュー

  • Linux KDE

Linux KDE

  • Windows

Windows

  • マックOS

mac

  • うなり声

Growl

1
Édouard Lopez

私はあなたがあなたのコンピュータにつながれる必要がないようにプロセスが終わるときあなたのAndroid携帯電話に通知を送るアプリを作りました。

インストールしてから、コマンドの末尾に;notifier.shを追加します。

例えば、あなたのコマンドがmake installであれば、あなたはあなたのコマンドを作るでしょう:

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier

0
Jolt151

もう一つの可能​​性はalert、Works on Linuxを使うことです。

>any-command; alert

画像のように通知します。 アラート通知

0
DTharun