tmux セッションに接続せずに何が起こっているかを確認することはできますか?

tmux セッションに接続せずに何が起こっているかを確認することはできますか?

しばらく実行されるタスクを開始するには、よく を使用しますtmux。 定期的に に戻って確認しtmux -a、まだ完了していない場合は切断して、後でもう一度確認します。

完全に接続せずに、セッションで何が起こっているかの簡単なスナップショットを見る方法はありますか? 理論的には、tailセッションで を実行して最後の出力を取得するようなものを探しています (ただし、出力のコピーを含む別のファイルを作成しなくても済むのであればなお良いです)

おそらく、アタッチしてすぐにデタッチすることも機能するでしょう。キーストロークを節約しようとしているのですが、おそらくそのようなコマンドはリモートで実行できるでしょう
ssh root@server tmux --tail?

答え1

capture-paneあなたのニーズに合うと思います:

tmux capture-pane -pt "$target-pane"

(ペインを指定する方法については、マニュアルページの「target-pane」を参照してください)

デフォルトでは、このコマンドは指定されたペインの現在の内容をダンプします。-Sおよび-Eオプション (開始行番号と終了行番号) を使用して行の範囲を指定できます。最初の行は 0 で、負の数はペインの「スクロール バック」履歴の行を参照します。したがって、追加すると、-S -10履歴の最新の 10 行とペインの現在の内容が取得されます。

tmux capture-pane -pt "$target-pane" -S -10

この-pオプションは 1.8 で追加されました。以前のバージョンを実行している場合は、代わりに次の操作を実行できます。

tmux capture-pane -t "$target_pane" \; save-buffer - \; delete-buffer

しかし、このコマンドをリモートシェル経由で発行する場合は、セミコロンに注意してください。sshリモートシェルはシェルの解釈レベルをさらに追加します(セミコロンは最終シェルに引数として渡す必要があります)。tmuxコマンドを実行する場合、ローカル シェルまたはリモート シェルによって解釈されないようにする必要があります。

答え2

そうではありません。思いつく方法の 1 つは、長時間実行されるプロセス ( $lrp) を開始し、その後、定期的に再接続せずに、list-windows関連するセッションを実行することです。

ある時点で、$lrp を含む tmux ウィンドウの名前がデフォルト (通常はシェル) に戻り、$lrp が完了したことがわかります。

┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1  (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH  (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC  (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: $lrp* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)
┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1  (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH  (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC  (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: bash* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)

関連情報