web-dev-qa-db-ja.com

プロセスが完了したときにtmuxでアラートを出す

プロセスが完了したときに非アクティブウィンドウでアラートをトリガーするようにtmuxを設定できますか?

例:長いビルドプロセスを開始します。ステータスを出力するたびにではなく、完了したときに通知を受け取りたいのですが。

18
John

この答えがまだ与えられていないことに驚いています:tmuxウィンドウ設定を使用できますvisual-bell このため。 bell-action次に、現在のウィンドウのみのベルを表示するか、非現在のウィンドウのみ(その他)のベルを表示するかを構成できます。個人的には、シェルによって生成されたノイズが表示されないため、2番目の方が好きです。また、通知が現在のウィンドウにある場合は、通知を気にしない可能性があります。

set-window-option -g visual-bell on
set-window-option -g bell-action other

プロセスがベルを生成すると、tmuxはベルを鳴らしているウィンドウのタイトルを強調表示し、「Bell inwindowX」通知を表示します。

次に、プロセスの最後にベルを鳴らします。例えば。:

make; echo -e '\a'

(または&&|| の代わりに ;それぞれ成功または失敗時にのみ呼び出し音を鳴らしたい場合)

23
wump

私が知っている3つの解決策がありますが、どれも本当に理想的ではありません。これらのコマンドを~/.tmux.confに入れるか、Ctrl-B :を介してTmuxコマンドとして直接実行することができます。

  1. 出力が変更されるたびに監視および警告します(コマンドが完了した後にのみ出力が変更されるように、出力を別の場所にリダイレクトできます)。

    :set -g visual-activity on
    :setw -g monitor-activity on
    
  2. 出力がしばらくの間(ここでは30秒)変化しなかったnotの場合は常に監視し、警告します。

    :set -g visual-silence on
    :setw -g monitor-silence 30
    
  3. 非推奨そしていつかより良いオプションに置き換えられます )出力に特定のパターンに一致する文字列が含まれている場合(および場合によってはmy-command; echo foobar)のようにコマンドを実行します。

    :set -g visual-content on
    :setw -g monitor-content foo*bar
    
  4. $ some-command; tmux display-message "Task 1 done"。ただし、メッセージは:set -g display-time 4000で定義された短い期間のみ表示されます。

visual-*off(デフォルト)のままにすると、グローバルアラートステータスメッセージを表示せずに、アラートが発生したウィンドウの名前のみが強調表示されます。

これらの各設定の詳細については、 tmuxのマニュアルページ を参照してください。

更新(Steven Luに感謝)

12
Wernight

私はついに自分に合った解決策を見つけました。シェルにzshを使用します。これには、「フック関数」と呼ばれる機能があります-特定のアクションで実行されるシェル関数: http://zsh.sourceforge.net/Doc/Release/Functions .html

他のシェルにも同様の機能がある可能性があります。

私が使用するフック関数はprecmdで、プロンプトが表示されるたびに実行されます。つまり、コマンドの実行が終了したときです。

私の.zshrc

precmd () {
  echo -n -e "\a"
}  

これにより、ベルがtmuxに送信され、コマンドが実行されていたウィンドウのみが強調表示されます。

すでにそのtmuxウィンドウに焦点を合わせている場合、ベルはすぐにクリアされるため、これは何もしません。

このアプローチの利点は、allの視覚的アクティビティでトリガーされないことです。コマンドが完了したときにのみトリガーされます。

5
psp940

実行中のスクリプトを&& bash派生物でラップして、tmuxコマンドを呼び出して通知することができます。 &&を使用すると、スクリプトがエラーコード0で終了した場合にのみ通知が届きます。とにかく通知する場合は、;を使用してください。

スクリプトをラップするtmuxコマンドについては、それらの束を見てください。select-windowsplit-window-h'exec echo ... 'send-keysで十分です。

2
abutbul

良い回避策として、次を使用できます: https://github.com/tcreech/tmux-notifications

あなたは単にします:$コマンド; tmux-通知

ステータスバーにNice通知が表示されます(有効になっている場合)

0
Thomas Legris

2つのオプションがあります:

set -g visual-activity on
setw -g monitor-activity on

tmux.confでそれらを設定しようとしましたか?

0
Kent