コマンドラインで一連のコマンドを実行していますが、完了までに約20分かかります。これらが終了したときにMacで何らかの通知を表示したいので、終了時に端末を監視する必要はありません。これを行う方法はありますか?
$ svn update . && ant clean build start && *notify_me_somehow*
編集:
使用できますxclock
が、これはハックのようです。理想的には、電話、画面など、どこにでも通知を送信できます。
コマンドラインで一連のコマンドを実行していますが、完了までに約20分かかります。これらが終了したときにMacで何らかの通知を表示したいので、終了時に端末を監視する必要はありません。これを行う方法はありますか?
$ svn update . && ant clean build start && *notify_me_somehow*
編集:
使用できますxclock
が、これはハックのようです。理想的には、電話、画面など、どこにでも通知を送信できます。
回答:
(svn update . && ant clean build start && say done) || say error
&&
を使用して複数のコマンドを連結し、集合||
またはステートメントでラップしてエラーを発生させる素晴らしい例です。確かに+1
alias -g sd='; say done'
。これはsd
、コマンドに追加するだけで通知されることを意味します。
(echo alik && echo Orly && say done) || say error
say -v Zarvox
、近くの全員がジャンプするようにエコーしてきましたが、これは少し警戒の少ない通知です。
Mac OS 10.8では、通知センターのメッセージを自分で送信できます(Growlと似ていますが、Mac OSに組み込まれています)。
「OS Xのコマンドラインから通知センターにアラートを送信する」をチェックして、コマンドラインから通知を送信できるRuby gemをインストールする方法を確認してください。ターミナルで何かが行われているという事実を単に気にするという一般的なユースケースを簡素化するには、エイリアスを.bash_profileに追加します。
alias notifyDone='terminal-notifier -title "Terminal" -message "Done with task!"'
それからあなたは単にすることができます:
$ <long-running task> ; notifyDone
長時間実行されるタスクが完了すると、クリックするまで持続する素敵なモーダルポップアップが表示されます。
brew install terminal-notifier
。その後、あなたは書くことができますmyCommand && terminal-notifier -message 'finished'
。OS X Yosemite(10.10.1)でテスト済み。
myCommand; terminal-notifier -message 'finished'
ないと、myCommand
失敗した場合に通知が表示されません。
say
コマンド、例えば my command ; terminal-notifier -message 'finished' ; say finished
Growlを使用します。
で.dmg
、ファイル、エキストラを探し、growlnotifyバイナリがあります。のようにインストールします/usr/local/bin
。次に、このコマンドを使用できます
growlnotify --sticky --appIcon <icon> --message <message> -t <title>
そのようなポップアップを表示するには:
Mac OS X Lion 10.7の時点で、ターミナルには次のような問題に役立つ新しいステータスインジケータがいくつかあります。
タブ内:
アクティビティ:アクティビティインジケータ(回転進行インジケータ)は、ターミナルへの最近の出力があるときに表示されます。これにより、現在ビジーであるか、長いプロセスを完了したかを確認できます。(または、もちろん、しばらくの間静かに作業を実行した後、いつ出力の生成を開始したかを知るために使用できます。)
未読:省略記号「…」が表示され、背景タブの新しい未読テキストを示します。タブを選択すると、インジケータがクリアされます。
警告:BELがバックグラウンドタブまたはバックグラウンドウィンドウに書き込まれたことを示す「ベル」が表示されます。さらに、ターミナルはアプリケーションアイコンに赤いバッジを表示し、すべてのターミナルの「未読」アラート/ベルの数を示します。ターミナル自体がバックグラウンドにある場合、ベルが鳴るとDockアイコンも跳ね返ります。
最小化されたウィンドウのDockアイコン:
アクティビティ:アクティビティは、フォアグラウンドプロセスの名前を表示することで示されます。
未読:未読テキストは省略記号で示されます。
最小化されたターミナルウィンドウは、Dockアイコンにライブコンテンツを表示します。これは、アクティビティがあるかどうかを確認したり、探している出力が識別可能な場合(たとえば、「トップ」ディスプレイが小さいサイズでもかなり簡単に認識できる場合)に端末の動作を判断したりするために使用できます。これは、Dockの拡大機能がオンになっている場合、または大きなDockのスペースがある場合に特に便利です。
さらに、端末に何かを表示して注意を引くことができます(最小化されたウィンドウでも表示されます)。例えば:
大きなアスタリスクを表示する: banner \*
表示を反転します。 printf '\e[?5h'
ディスプレイを赤くペイントします。 tput setab 1; tput clear
ループに座って、画面をフラッシュします。 while true; do printf '\e[?5h'; sleep 1; printf '\e[?5l'; sleep 1; done
ウィンドウを操作するためのエスケープコードもあります(移動、サイズの設定、ズーム、最小化など)。たとえば、ターミナルウィンドウをズームできます。
printf '\e[9;1t'
詳細については、http://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlの「ウィンドウ操作」を参照してください。
別の方法は、AppleScriptを使用して別のウィンドウにアラートを表示することです。
osascript -e 'tell app "System Events" to display alert "Build Completed" message "The checkout and build have completed."'
私は質問に遅れていることを知っていますが、役に立つかもしれない少し欠けている部分があると思います。きちんとしたものの、端末との対話は機能的ではないことがわかりました。より良いのは、このようなサブタイルです:
クリスが指摘したように、BELが投げられたとき、ライオンは小さな通知バッジを追加しました。次のコマンドを使用して、自分でこれをスローできます。
tput bel
そのため、バックグラウンドで何らかの作業を行っており、終了時に通知が必要な場合は、次のようなことを試すことができます。
ping -c 5 www.google.com && tput bel &
これにより、pingコマンドがバックグラウンドタスクとして実行され(ハング&完了)、終了時に簡単なアラートがスローされます。歴史的にBELはその[恐ろしい]ハードウェアのビープ音を鳴らすために使用されてきましたが、Lionはそれを「無効なコマンド」サウンドエフェクト、通知バッジ、ドックで2回バウンスする端末アイコンで上品に置き換えました。
printf '\a'
はと同等tput bel
です。警告の原因となったタブが現在アクティブな場合、ターミナルはDockアイコンをバウンスしないことに注意してください。
この回答では、2つのことを示します。
afplay
サウンドファイルを再生するを使用するオプション。私はこのスクリプトを持っています~/bin/donebeep
:
#!/bin/bash
if [ "$@" = 0 ]; then
afplay -v 2 /System/Library/Sounds/Blow.aiff &
else
afplay -v 2 /System/Library/Sounds/Sosumi.aiff &
fi
これは、引数が0かどうかに応じて異なるサウンドを再生します。次に、エイリアスがあります。
alias donebeep='(savestatus=$?; ~/bin/donebeep $savestatus "$@"; exit $savestatus)'
(それらが同じ名前を持っていることは無関係であり、おそらく悪い考えです。)
あなたの例でそれを使用するには、svn update . && ant clean build start; donebeep
。成功ではなく失敗時にも通知できるように、;
ではなくを使用していることに注意してください&&
。
について学ぶafplay
前に、私はsay
代わりにメッセージを話していました。donebeep
このスクリプトは次の役割を果たしました。
#!/bin/bash
say -v Bruce "Done $(basename "$(pwd)"), $@." &
このスクリプトは、2つの異なるメッセージを表示する代わりに、終了コードを直接読み上げます。また、現在のディレクトリの名前(言及されているタスクを明確にするため)に言及し、エイリアスにパラメーターを渡すことで追加のテキストを与えることができます(そのため、エイリアスに含ま"$@"
れています)。&
プロンプトが表示される前にスピーチが終了するのを待つ必要がないように、末尾に注意してください。
のmanページafplay
は不完全です。afplay -h
すべてのオプションをリストします。
Usage:
afplay [option...] audio_file
Options: (may appear before or after arguments)
{-v | --volume} VOLUME
set the volume for playback of the file
{-h | --help}
print help
{ --leaks}
run leaks analysis {-t | --time} TIME
play for TIME seconds
{-r | --rate} RATE
play at playback rate
{-q | --rQuality} QUALITY
set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
{-d | --debug}
debug print output
まさにこれを行うシンプルなツールを作成します。https://github.com/vikfroberg/brb
設置
Node.jsをインストールする必要があります:http : //nodejs.org
$ npm install -g brb
説明書
$ sleep 3; brb
私はntfy
まさにこの目的のために書きました。それは、クロスプラットフォームとすることができ、自動的に実行時間の長いコマンドが終了したときに通知を送信します。
Pythonをお持ちの場合pip
(ほとんどのLinuxディストリビューションとMacOSにあります)、ここにインストールして自動通知を有効にする方法を示します。
$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
http://ntfy.rtfd.ioで確認してください
それに加えて、次のこともできます。
iTerm2には通知を取得するための組み込みメカニズムがありますが、シェル統合をインストールする必要があります。
長期実行コマンドを開始するときは、次を選択します:
編集>マークと注釈>アラート>次のマークでアラート(⌥Option
+ ⌘Command
+ A
)
コマンドプロンプトが返されたら、次のいずれかを選択できます。
Ubuntuは、〜/ .bashrcに次のエイリアスを同梱しています。
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
これにより、次のようなことができます。
make; alert
sleep 10; alert
おそらくnotify-send
Mac OSXに相当するものがありますか?MacとUbuntuの両方で、同様のポップアップウィンドウを見ました。
notify-send
のMac OS X上で
サウンドとモーダルウィンドウに関する私の問題は、それらがどこから来たのかわからないことです。私は現在、多くのスペースを使用しており、時には20個以上のターミナルウィンドウを使用しています。
私のソリューションは、UNIX側に移植可能であり、ANSIエスケープシーケンスをサポートするものであれば何でも動作するはずです。このソリューションはSnow Leopardで動作し、おそらくより古いバージョンのターミナルでも動作します。
.bash_profileの単一行
function watch { $* ; echo -n -e "\033[41m" ; echo $* DONE ; date ; echo -n -e "\033[0m" ; }
その内訳:
$* expands to the original command I want to watch.
first escape sequence changes background color to red
echo repeats the command (with red background, the word DONE.
Running Date tells you when it finished.
last escape resets the terminal to what it was.
赤が気に入らない場合は、Google ASCIIエスケープコードの背景色を使用してください。これは画面全体を赤くするのではなく、コマンドが終了した後に出力されるものだけを変更することに注意してください。
これが私のbash関数です(あなたの~/.bashrc
orのどこかに置くだけ~/.zshrc
です:
watch(){
cmd=$@ # Somehow interpolate $@ directly doesn't work.
$@ && say 'Watch Completed!' && osascript -e "display notification \"Completed: $cmd\" with title \"Watch Alert\""
}
使用するには:
watch echo 'hi there'
ここに記載されているように、通知音をカスタマイズすることもできます:https : //apple.stackexchange.com/a/115373/9622
grownlnotify
。