コマンドライン – ジョブ/プロセスの終了時に通知をトリガーするには?

command-line notifications process unix

私が働いているところには、実行に時間がかかるコマンドがあります

コマンドの実行が終わったときに通知してくれるコマンド/ユーティリティはありますか?ポップアップウィンドウやちょっとした音でも良いのではないでしょうか

  91  Utkarsh Sinha  2011-10-11


ベストアンサー

一般的には、コマンドを実行する前にこのことがわかっていれば、コマンドを起動するだけでOKです

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 vs. GNU Linux など)、 tput bel でできるはずです。しかし、tput bel でできるはずです。詳しくは “ring bell” で検索してみてください

  • Mac OS Xでは、AppleScriptを使ってFinderダイアログをポップアップさせることができました

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

    何か言ってもらえばいいのに

    say "Job finished"
    

    もしくはマウンテンライオンの通知システムを利用するとか

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • GNOME では、zenity はコマンドラインから呼び出された GTK のダイアログボックスを表示することができます。この Stack Overflow の質問も参照してください。linux で bash スクリプトからのメッセージボックスを表示するお気に入りのパッケージマネージャからインストールすることができます

    zenity --info --text="Job finished"
    
  • ディストリビューションによってはxmessageがあるかもしれません。特にGTK環境ではgxmessageがあります

  • Desktop Notifications Specification, such as Ubuntu and GNOME, there’s a notification system that you can trigger with notify-send (libnotify の一部) を実装したデスクトップ環境で

    notify-send "Job finished!"
    
  • KDEでは、例えばkdialogを使用しています

    kdialog --passivepopup 'Job finished'
    

128  slhck  2011-10-11


unix ライクなシステムでは、可聴ベルを鳴らすことができます

echo -e "\a"

21  trinth  2012-10-10


MacOS X用のシンプルなツールを作ってみました。https://github.com/vikfroberg/brb

Installation

$ npm install -g brb

Instructions

$ sleep 3; brb

8  Viktor Fröberg  2014-06-08


サウンド通知を取得するには、spd-say "Some text"を使用することができます。例です

some-command; spd-say "Yo"

UPDATE

スピーチディスパッチャがプリインストールされていない場合は、経由してインストールすることができます

sudo apt-get install speech-dispatcher

6  milkovsky  2015-12-15


まさにこの目的のために ntfy を書きました。これはクロスプラットフォームで、長い間実行されているコマンドが終了したときに自動的に通知を送ることができます

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)を送信します
  • を使用して、プロセス終了時に通知を送信します(前述の自動サポートではありません)
  • 手動で通知を送信します (スクリプトでの使用に適しています)

5  Daniel Schep  2016-05-19


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

Example:

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

4  Ashutosh Jindal  2013-09-13


Linuxの場合は、通知用のコマンドを毎回入力しなくても自動的に行うことができるという気の利いた仕掛けがあります

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

sudo apt-get install autokey-gtk

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

; notify-send "Job finished!" &
#

1行目以降の改行が重要なので注意してください

また、ウィンドウフィルタを追加します。私はguakeとターミナルを使っています。他にも使っているターミナルがあれば何でも含めてください

.*(guake)|(Terminal).*

You’re done!!

これで、コマンドの通知を取得する必要があるときはいつでも、Enter/Return の代わりに Alt+Enter を使って実行できるようになりました

ソースは以下の通りです。http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html

3  shivams  2014-12-27


他の回答ではすでに終了した仕事の通知を受け取る方法のほとんどをカバーしていますが、以下のような形式で質問されたので、私の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 :-("

そのため、コマンドが正しい終了コードを返してくれれば、最初のプッシュが実行されます。エラーが発生した場合は、2回目のプッシュが実行されます

Ofcは、Pushoverでユーザーを作成し、https://pushover.net/から通知を送信するアプリを登録する必要があります

お役に立てれば幸いです

3  Thatkookooguy  2015-06-23


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

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

bashでもset -bset -o notifyで同様の効果を得ることができます

これは、メッセージを印刷するだけなので、おそらくあなたの要件を満たしていないでしょう

1  Keith Thompson  2011-10-11


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

awk 'BEGIN{ print "\a" }'

は、私のために働いてくれた唯一の人でした

1  Krzysztof  2015-09-04


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

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

Preview

  • Linux KDE

Linux KDE

  • Windows

Windows

  • Mac OS

mac

  • Growl

Growl

1  Édouard Lopez  2016-01-08


何年も前にこのスレッドに気づいていればよかった。私の解決策は基本的には 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  2016-07-22


それで、これはかなり遅くなりましたが、私はこれを行うためのシステムを使い始めました。私は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  SoWhat  2017-02-20


もう一つの可能性としては、alert, Works on Linuxを使用することです

>any-command; alert

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

0  DTharun  2017-11-25


処理が終了するとAndroid携帯に通知が届くアプリを作ってみました

インストールして、コマンドの最後に;notifier.shを追加します

例えば、自分のコマンドがmake installだった場合、自分のコマンドを作成します

make install; notifier.sh

https://notifier.sh
Not Found

0  Jolt151  2019-01-30


Zshを使用している場合は、zsh notifyが便利です

0  Azatik1000  2020-08-12


タイトルとURLをコピーしました