シェルタスク完了のGrowl通知


12

(OSX固有)

私は、他の多くの人と同じように、シェルで完了までに1〜2分かかるプロセス(たとえば、大きなsvnコミット)を開始することがよくあります。その間、私はしばしばalt-tabとreddit / slashdot / wikipedia / whateverを更新します。シェルプロセスが終了したときにうなり声の通知を送信するように設定しておくと便利です。

私の理想的な世界では、「ターミナルで開いているタブからプロセスが終了した場合、うなり声通知を投稿します。」のように動作します。

このようなものが他にありますか?


1
うなり声は、まだ画面に座っている場合にのみ通知することに注意してください。長いプログラムの場合は、「say」コマンドを使用して、終了したことを示すオーディオヒントを取得します。

@mankoff:growlnotifyアプリケーション通知設定を構成してGrowl.prefPane、音声通知音を含めることができます。ただし、実行するコマンドに応じて変更することはできsayません。しかし、気味が悪いです。
ダニエルベック

回答:


11

これを行うにはgrowlnotifyをインストールできます。

$ ./some_program && growlnotify Title -m Message

もちろん、コマンドを実行する前にこれについて考える必要があります。別の方法(これを実現する方法はわかりません)は、すべてのコマンドに対するGrowl通知であり、これはめちゃくちゃになります。


ユースケースでgrowlnotifyの使用を簡素化するには~/bash_profile、次を編集して追加します。

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

今、あなたは簡単にlong your_command(に似ていますsudo)。Ctrl-A(私のように)常に実際のコマンドを最初に入力し、その後にプレフィックスを追加する必要がある場合、行の先頭にカーソルを置きます。

私のbash-fuは、残念ながら、コマンドをgrowlnotifyメッセージに追加するには不十分です。


この回答に対する@mankoffのコメントごと:

コマンドの実行中に入力するだけで、後で実行されます。私は次の関数を作成しました。

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

として使用しgn svnます。


2
コマンドの前に考える必要はありません。実行中に通知されたい場合は、「gn foo」(またはオーディオヒントの場合は「say done」)と入力し、Enterキーを押すだけで、現在のコマンドが終了したときにそのコマンドが実行されます。 。

これを自動的に行うことにコメントしてください... PS1または何かを使用してタイムスタンプを変更します。PS2を使用して、PS1がPS2に触れてからの時間を確認します。n秒より長い場合は、growlnotifyを実行します。これは、すべてのコマンドで発生するわけではないため、面倒ではありません。

@mankoffはい。したがって、タイピングを減らす単純な関数で十分です。
ダニエルベック

@mankoff PS2?これは単なる継続プロンプトではありませんか?すべての出力行にプレフィックスを付けるわけではありません。
ダニエルベック

PS1 / PS2は、これを実装したい場合に私が探し始める場所としての単なる推測でした。おそらくすべてをPS1だけに埋め込むことができます。そしておそらく、一般的なコマンドごとのうなり声セットアップを行うためのまったく異なる方法があるでしょう。

2

必要なのはgrowlnotify、うなり声通知をトリガーするCLIプログラムです。次のように使用できます。

./script.sh;; growlnotify -m "done"

それはあなたが遊ぶことができるいくつかのより多くのノブを持っていますgrowlnotify -h、より多くの情報のために使用します


ありがとう。私もそれを見つけたと同時にコメントしました。セミコロンは&&よりも意味があります。
ezrock

1
@ezrock私は、成功状態と失敗状態の間で異なるメッセージを使用できる&&||考えていますが、コマンドの実行後に表示されるメッセージのみに興味がある場合は、誰でも簡単;;です。=)
roguesys

2

ダニエル・ベックの答えを修正すると、このわずかな変更を行うと非常に便利になります。

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

その後、「long svn up」を実行すると、「svn up completed。」というメッセージが表示されます。

多くの時間を消費するシェルスクリプトを同時に実行する場合、非常に便利です。


2

OSX 10.8以降にはネイティブ通知があるので、これがterminal-notifierを介して同じ目標を達成する方法です。

  1. brewをインストールする
  2. $ brew install terminal-notifier
  3. これを追加~/.bash_profile

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }

. ~/.bash_profileプロファイルはセッションの作成時に自動的に取得されるため、プロファイルを取得したことを確認してください(将来のターミナルセッションでは必要ありません)。

お気に入りのコマンドでテストし、その後に関数呼び出しを行います。

ls ; gn

terminal-notifierの引数は多少改善される可能性がありますが、前のコマンドをつかんで関数に渡す試みは成功しなかったため、必要なすべての機能が得られます。つまり、;gn長期実行プロセスの最後に通知を取得するために追加します。



1

これは、「長時間実行」プロセスに対して自動的に呼び出される方法です:http : //hints.macworld.com/article.php?story=20071009124425468

フックし、$PROMPT_COMMANDプロセスの完了を完了するまでに10秒以上かかることを通知します。独自の環境やワークフローに合わせて微調整する必要がある場合があります(たとえば、完了lessやエディターの呼び出しを無視するなど)が、そのままで十分に機能するようです。


私は自分で試したことはありませんが、完全に自動化されたアプローチは本当に魅力的です。ここでの他のすべてのソリューションでは、コマンドが長時間実行されることを事前に知っており、スクリプトをトリガーすることを覚えている必要があります(例:ls; growlnotify)。手動でトリガーする必要がないというアイデアが気に入っています。
ezrock 14

0

ちょっと調べてみたところ、簡単な方法が見つかりました。それは私が望んでいるよりも少しマニュアルですが、ここに行きます。

  1. growlnotifyをインストールします(Growlのインストールダウンロードのextrasフォルダーにあります)。
  2. && growlnotify -m "Message"長いプロセスに< >を追加します。

今はそれでうまくいきますが、もっとうまくやれるかもしれません。


0

サードパーティソフトウェアを使用しないOSX 10.9+ソリューション:

OSX 10.9以降では、AppleScriptコマンドdisplay notificationを使用して、端末からうなり声を表示できます。

osascript -e 'display notification with title "Process Completed."'

すべてを毎回入力したくない場合は、次を使用できますalias

alias growl='osascript -e "display notification with title \"Process Completed.\""'

例:

long-running-script.sh; growl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.