私が働いている場所には、実行に時間がかかるコマンドがあります。
コマンドの実行が終了したときに通知するために使用できるコマンド/ユーティリティはありますか?ポップアップウィンドウまたは小さなサウンドである可能性があります。
私が働いている場所には、実行に時間がかかるコマンドがあります。
コマンドの実行が終了したときに通知するために使用できるコマンド/ユーティリティはありますか?ポップアップウィンドウまたは小さなサウンドである可能性があります。
回答:
通常、コマンドを実行する前にこれを知っている場合は、次のコマンドで開始できます。
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は、Finderダイアログをポップアップ表示するAppleScriptを使用できます。
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"
ではGNOME、zenity
コマンドラインから呼び出されたGTKのダイアログボックスを表示することができます。このスタックオーバーフローの質問も参照してください。Linuxのbashスクリプトからのメッセージボックスを表示します。お気に入りのパッケージマネージャーからインストールできます。
zenity --info --text="Job finished"
UbuntuやGNOMEなど、デスクトップ通知仕様を実装するデスクトップ環境には、(の一部)でトリガーできる通知システムがあります。notify-send
libnotify
notify-send "Job finished!"
KDEはkdialog
、たとえば、を使用します。
kdialog --passivepopup 'Job finished'
(command; command-after) &
か?
MacOS X用に、まさにこれを行う簡単なツールを作成しました。https://github.com/vikfroberg/brb
設置
$ npm install -g brb
説明書
$ sleep 3; brb
サウンド通知を取得するには、を使用できますspd-say "Some text"
。例:
some-command; spd-say "Yo"
sudo apt-get install speech-dispatcher
ます。または使用の代替案はaskubuntu.com/questions/501910/...
Cygwinからのデスクトップ通知にnotifuを使用し始めたばかりです。これは、Windows用のコマンドライン通知アプリです。
例:
ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
私はntfy
まさにこの目的のために書きました。それは、クロスプラットフォームとすることができ、自動的に実行時間の長いコマンドが終了したときに通知を送信します。
Pythonをお持ちの場合pip
(ほとんどのLinuxディストリビューションとMacOSにあります)、ここにインストールして自動通知を有効にする方法を示します。
$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
http://ntfy.rtfd.ioでそれをチェックしてください
それに加えて、次のこともできます。
Linuxの場合、毎回通知用のコマンドを入力することなく、これを自動的に行う巧妙なトリックがあります。
最初にオートキーをインストールします。これは、さまざまなキーストロークのアクションを定義するのに役立ちます。
sudo apt-get install autokey-gtk
次に、オートキーで新しいフレーズを定義し、ホットキーをAlt + Enterとして割り当てます。このフレーズを追加します。
; notify-send "Job finished!" &
#
最初の行の後の新しい行が重要であることに注意してください。
また、ウィンドウフィルターを追加します。グアケとターミナルを使用しています。使用する他の端末を含めます。
.*(guake)|(Terminal).*
できました!!
これで、コマンドの通知を取得する必要があるたびに、Enter / Returnの代わりにAlt + Enterを使用して実行できます。
ソース:http : //dotpad.blogspot.in/2014/12/notification-when-command-finished.html
他の回答はすでに終了した仕事の通知を受け取る方法のほとんどをカバーしていましたが、あなたが次の形式で質問をしたので、私は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
}
これは、プッシュオーバーアプリを使用して、通知を電話にプッシュします。このようにして、昼食に行ったり会議に参加したりしても、出発前にコンピューターで開始したジョブの通知を受け取ることができます。
次の方法で使用します。
command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("
そのため、コマンドが正しい終了コードを返す場合、最初のプッシュが実行されます。エラーが発生すると、2番目のエラーが実行されます。
プッシュオーバーでユーザーを作成し、アプリを登録してhttps://pushover.net/から通知を送信する必要があり ます
これが役に立てば幸いです!
対話型シェルとしてcshまたはtcshを使用する場合、notify
次のコマンドを使用できます。
% long-running-command &
[1] 14431
% notify %1
%
(later, when the command finishes)
[1] Done long-running-command
set -b
またはを使用して、bashで同様の効果を実現できset -o notify
ます。
これはおそらくメッセージを出力するだけなので、要件を満たしていません。ウィンドウをポップアップしたり、ベルを鳴らすように設定できるとは思いません。
「awk」を試してみるシステム
awk 'BEGIN{ print "\a" }'
私のために働く唯一の人でした。
\a
(trinthの答え)。
使用している場合npm
、node-notifierはクロスプラットフォームソリューションを提供します。
notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "
何年も前にこのスレッドに気づいたと思います。私のソリューションは基本的に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エスケープシーケンスです。メッセージの送信元のウィンドウを確認できると便利な場合があります。
だから、これはかなり遅くなりますが、私はこれを行うためにシステムを使用し始めました:私は後でそれに渡されるコマンドを実行する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
プロセスの終了時にAndroidスマートフォンに通知を送信するアプリを作成したので、コンピューターに接続する必要はありません。
インストールして;notifier.sh
から、コマンドの最後に追加します。
たとえば、コマンドがの場合、コマンドmake install
を作成します。
make install; notifier.sh
fg;say "Job finished"
がうまくいくことに気付いたはずです。しかし...さらに自動化できる方法はありますか。つまり、ベルを鳴らしたり、1分などのしきい値を超えるジョブの完了後に通知したりしますか。最後のコマンドの経過時間である、bashなどのシェル変数はありますか?