7

私は多数のUnixライクなサーバーを維持するのを手伝っています。そのtmux-rebuildため、各サーバーへのSSHリンクを使用してすべてのtmuxセッションとウィンドウを再構築するために使用するスクリプトを保持します。

ターミナルベル文字がウィンドウに印刷されたときに、ステータスバーに感嘆符が付いたウィンドウの名前を赤で表示するようにtmuxを構成しました。irssiこれは、別のウィンドウにメッセージが表示されたときに警告するようなプログラムに非常に便利です。

また$PS1、すべてのサーバーで、すべてのプロンプトの最後にターミナルベルを印刷するように設定しています。これは、あるウィンドウで長いジョブを実行して別のウィンドウに切り替えると、ジョブの完了後にプロンプ​​トが画面に書き込まれると、tmuxによってウィンドウ名が赤で表示されるため、終了したことがすぐにわかるため便利です。感嘆符。これは私のワークフローに最適です。

ただし、tmuxを実行した後に起動すると、最初のプロンプトが画面に出力されるため、すべてのセッションのすべてのウィンドウに赤のフラグが付けられるため、上記の再構築スクリプトでわずかな問題が発生します。これにより、すべてのウィンドウにアクセスするまでこの機能は使用できなくなり、40〜50個のウィンドウが表示されます。

作成後にセッションとウィンドウからすべてのアラートをクリアするスクリプトに追加できるものはありますか?必要に応じて応急修理を使用してもかまいません。

4

3 に答える 3

7

tmux のマニュアル ページ、具体的にはここの最後の文から:

kill-session [-aC] [-t target-session]
          Destroy the given session, closing any windows linked to it
          and no other sessions, and detaching all clients attached 
          to it.  If -a is given, all sessions but the specified one is
          killed.  The -C flag clears alerts (bell, activity, or
          silence) in all windows linked to the session.

したがって、単純に:

tmux kill-session -C
于 2017-10-13T02:02:45.873 に答える
6

許容できる回避策を見つけました。繰り返しを許可するために、次/前のバインディングを再定義しました。

# Allow repeats for next/prev window
bind-key -r n next-window
bind-key -r p previous-window

これにより、プレフィックス キーを押してすべてのウィンドウがクリアされるまで「n」をタップすることで、セッション内のすべてのウィンドウのアラートをすばやく一掃し、元のウィンドウに戻ることができます。

于 2012-09-30T12:30:13.657 に答える
4

tmux 1.6 (およびそれ以降) では、カスタマイズlist-windows可能な出力を生成できるため、出力行を読み取り、select-windowウィンドウごとに実行されるループを作成するのはかなり簡単です。

list-session(オプションですべてのセッションをループするため) とdisplay-message(セッション指定子を解析し、適切に復元できるように現在/「最後の」ウィンドウを記録するため)を追加すると、次のような結果になる可能性があります。

#!/bin/sh

# usage: tmux-select-each [session [...]]
#
# Select every window in specified session(s). If no sessions are
# specified, process all windows in all sessions.
#
# This can be handy for clearing the activity flags of windows in
# freshly spawned sessions.

if test $# -gt 0; then
    for session; do
        tmux display-message -p -t "$session:" '#S'
    done
else
    tmux list-sessions -F '#{session_name}'
fi |
while read -r session; do
    active_window=$(tmux display-message -p -t "$session:" '#S:#I')
    last_window=$(tmux display-message -p -t "$session:"\! '#S:#I' 2>/dev/null)
    tmux list-windows -t "$session" -F '#{session_name}:#{window_index}' |
    while read -r window; do
        if test "$window" = "$active_window" ||
           test "$window" = "$last_window"; then
            continue
        fi
        tmux select-window -t "$window"
    done
    if [ -n "$last_window" ]; then
        tmux select-window -t "$last_window"
    fi
    tmux select-window -t "$active_window"
done
于 2012-10-01T09:14:16.637 に答える