ジョブ/プロセスが完了したときにiTerm端末に通知させるにはどうすればよいですか?


105

通知センターの通知は理想的ですが、うなり、バウンスドック、サウンドなども問題ありません(または、これがTerminal.appでのみ実行できる場合は、切り替えてもかまいません)。iTermのどこかに通知をオンにするオプションはありますか、それとも端末のコマンドの最後に入力するものですか?後者の場合、プロセスの開始後にアラートを追加することは可能ですか(たとえば、最初に予想よりも時間がかかることに気付いた場合、私は推測が苦手です)。

回答:


197

すでに実行中のプロセスについて通知する

ショートカット: Aまたは:

Edit -> Marks and Annotations -> Alerts -> Alert on next mark

不気味な目!iTerm端末の(右上隅に)文字通り目を離しません。コマンドが完了すると、に連絡しNotification Centerます。

どうして?

コマンドはすでに起動しています。私たちは完了に必要な時間を過小評価しました、それをキャンセルしたくないので、座ってそれを見るのを拒否します。例えば、brew update久しぶり!

必要条件

iTerm:シェル統合:

iTerm2 -> Install Shell Integration

統合では、iTerm2が再起動されるまで通知が表示されないことに注意してください。


11
シェル統合をインストールした後、iTerm2-> [設定]-> [プロファイル]-> [ターミナル]に移動し、下にスクロールして[マークインジケーターを表示]をオフにします。このシェル統合は好きではありませんでした。アラートスタイルのポップアップではなくos通知が必要な場合は、編集->マークと注釈->アラート->通知を投稿することもできます。
Charles L.

@simonhamp 埋め込みセッションにトリガー(iterm2.com/documentation-triggers.html)を使用することをお勧めします
phirschybar

3
@dwandersonこれをtmuxで動作させたことがありますか?これはとても役に立つでしょう
Lucas

@Lucasシェルの統合がtmuxまたは画面で機能
リッチストーン

2
この目が怖い!! (╯‵□ ′)╯︵┻━┻
WTIFS

42

コマンドとコマンドの間にセミコロンを入れて、コマンドの後に次のいずれかを追加できます。

afplay /System/Library/Sounds/Ping.aiff -v 2

osascript -e 'beep 3'

tput bel

または、通知センターが好きな場合

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

プロファイルにエイリアスを作成し、呼び出してnotify、コマンドの最後に追加することもできます。だから、あなたのログインプロファイルで

alias notify="tput bel"

その後

sleep 10; notify

または、コマンドを開始し、それが「ハング」している場合は、入力notifyしてヒットするだけで、最後にエイリアスEnterが実行されますnotify。たとえば、コマンドが終了した場合、

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>

うーん、このコマンドでosascript -e 'display notification "Task finished" with title "Terminal"'このエラーが発生しているようです2015-05-04 12:34:23.227 osascript[30467:1130887] Error loading /Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools, 262): no suitable image found. Did find:
Truth1ness

エラーのパート2/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax" declares no loadable handlers.
True1ness

MavericksまたはYosemiteより古いシステムを使用していますか?
Mark Setchell、

いいえ、ヨセミテ10.10.3
Truth1ness

ああ、それは変だ。osascript -e 'display notification "Hello"'ここから具体的にコピーして貼り付けることで、もっと簡単なことを試すことができますか?
Mark Setchell、2015年

33

そして、いつでもsayコマンドを使用できます。

通常は、端末内部の長いプロセスを実行すると、あなたは、単にのようなものを話すように、このコマンドを使用することができます更新されますしたいときdoneerrorbazinga

mvn clean install; say done 

このコマンドは、Java Springアプリをビルドし、長い時間がかかりdone、プロセスが完了した後に読み上げます。


16

iTerm2Growl通知をサポートしています。各プロファイル設定でオンにすることができます。

Preferences…->でプロファイルを選択しますProfiles。次に、TerminalタブにオプションがありますEnable Growl Notifications

またiTermGrowl設定で通知を有効にすることを忘れないでください。

特定のプロセスの通知を受け取りたい場合は、を試してみてくださいTriggers。トリガーはAdvanced、プロファイル設定のタブで定義します。このようにして、プロセスの特定の出力(regexp)にGrowl通知を割り当てることができます。

たとえば、次のようにすることができます。

$ mycommand; echo "end-of-my-process"

トリガーを「プロセスの終了」メッセージに接続します。

更新

iTerm2.comでトリガーの詳細をご覧ください


ですから、プロセスの最後にスクリプトが何を書き込んでいるかを知るために一度スクリプトを実行する必要があるので、完了したプロセスのアラートを取得するグローバルな方法がないことは正しいですか(実行するスクリプトごとに1つ作成する必要があります) )?たとえば、youtube-dlプロセスの最後の行はです[download] 100% of 40.13MiB in 00:13が、この行は、終了するすべてのファイルに対して繰り返されます。「プロセスの終わり」文字列には何を入れますか?デフォルトのシェルプロンプト~ >が再び表示されたときにトリガーをかけることはできますか?
true1ness

@ truth1ness完成したプロセスについて通知する一般的な方法はないと思います。iTerm端末出力の終了のために、新しい端末出力の通知を送信します。これは一部のプロセスで機能します。すべてのプロセスで機能する方法は、私が提案したものです。「プロセスの終了」メッセージには、一意の文字列を使用できます。それはあなたのプロセスによって印刷されないようにユニークです。文字通り「エンド・オブ・マイ・プロセス」テキストである可能性があります。トリガー定義に正確に同じ文字列を入力し、それに通知を添付する必要があります。シェルプロンプトで動作するかどうかはわかりません。自分で試してみてください。
2015年

ああ、誤解しました、もうわかりました。エコー出力「end-of-my-process」でポップアップするアラートを取得できました。ただし、プロセスが開始する前に実際にechoコマンドを発行したときにもアラートが表示されます。実際にコマンドを発行し、エコーされた文字列のみを確認するときに、iTermに文字列を無視するように指示するにはどうすればよいですか?ヘルプファイルから、トリガー正規表現の前に\ 0(「正規表現に一致する値全体」)を追加してみましたが、それでもトリガーが2回実行されます。
true1ness

@ truth1nessクリエイティブにしてくださいecho "end-of-""my-process" 。たとえば、内部で引用符を使用します。プロセスが終了した場合にのみ、「プロセスの終了」テキストと一致します。
2015年

9

notiと呼ばれるOSSツールがあります。

brew install notiコマンドの前にnotilikeを付けるだけで、簡単にインストールして使用を開始できますnoti sleep 3


3

terminal-notifiermac osシステム通知を使用することもできます。Home brew経由でインストールするには:

$ brew install terminal-notifier

次に、ジョブ/プロセスが完了したときに通知を表示したい場合は、次のようなものを使用します

$ <your job/process command> && echo 'Completed' | terminal-notifier -sound default

そして、この表示は次のようになります。

ここに画像の説明を入力してください

通知の音やアイコンを変更することもできます。githubリポジトリの詳細:https : //github.com/julienXX/terminal-notifier


1

iTerm2シェル統合をインストールする

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

コマンドを実行し、アテンションアプリを連結します。

./task && ~/.iterm2/it2attention once

ジョブが完了すると、iTermアプリはアイコンをバウンスします。

他の注意オプションもあります:

$ .iterm2/it2attention -h
Usage:
  it2attention start
    Begin bouncing the dock icon if another app is active
  it2attention stop
    Stop bouncing the dock icon if another app is active
  it2attention once
    Bounce the dock icon once if another app is active
  it2attention fireworks
    Show an explosion animation at the cursor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.