web-dev-qa-db-ja.com

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

(OSX固有)

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

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

他の誰かがこのような設定をしていますか?

12
ezrock

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

$ ./some_program && growlnotify Title -m Message

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


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

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

これで、単純にlong your_commandSudoと同様)を実行できます。 Ctrl-Aは、カーソルを行の先頭に置きます。(私のように)常に最初に実際のコマンドを入力し、後でプレフィックスを追加する必要がある場合。

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


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

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

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

gn svnとして使用します。

11
Daniel Beck

必要なのはgrowlnotifyです。これは、growl通知をトリガーするCLIプログラムです。あなたはそれを次のように使うことができます:

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

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

2
roguesys

このわずかな変更を行う場合、ダニエルベックの答えを変更すると、非常に素晴らしいものになります。

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

次に、「long svn up」を実行すると、「svnupcompleted」というメッセージが表示されます。

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

2
bmucklow

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を追加して、実行時間の長いプロセスの最後に通知を受け取ります。

2
ezrock

growlnotify を使用します。

ls && growlnotify -H localhost -m "message"
1
fideli

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

$Prompt_COMMANDにフックし、完了までに10秒以上かかるプロセスの完了を通知します。独自の環境とワークフローに合わせて微調整する必要があるかもしれませんが(たとえば、lessの完了やエディターの呼び出しを無視する)、箱から出してすぐにうまく機能するようです。

1

私はもう少し突っ込んで、これのための簡単な方法を見つけました。それは私が望むより少し手動ですが、ここに行きます。

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

それは今のところ私にとってはうまくいきますが、私はもっとうまくやることができます、メチンク。

0
ezrock

サードパーティソフトウェアを使用しないOSX10.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
0
stiemannkj1