Tmuxセッションのすべてのスクロールバックをファイルに書き込むにはどうすればよいですか?
capture-panel
は現在の画面を取得できますが、スクロールバック全体は取得できません。
これは、history-limit
に設定した.tmux.conf
の値によって異なります。デフォルトは2000です。さらにキャプチャしたい場合は、行数を明示的に設定する必要があります。
スクロールバック全体をキャプチャするには、コピーモードに入り、スクロールバック全体を選択し、それをバッファにヤンクして、ファイルに貼り付けます。
これをどのように達成するかは、viまたはemacsであるmode-keys
オプションによって異なります。 man tmux
には、それぞれのキーを説明する役立つ表があります。
これを簡単にするために、.tmux.conf
には次のようにします。
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
完全なスクロールバックをキャプチャするプロセスは、次のとおりです。
PrefixEsc :コピーモードに入ります
v :ビジュアル選択を開始します(既に画面の下部にいると想定)
gg :スクロールバックのすべてをキャプチャする
y :バッファにヤンクする
Prefixc :別のtmuxウィンドウを開く
vim scrollback.txt
i :vimで挿入モードに入ります
Prefixp :ファイルに貼り付け
xsel
を使用してバッファを一時ファイルにコピーする方法を説明する回答もあります。
簡単な答えをお探しの方は、 prefix + :、次にcapture-pane -S -3000
+ return (置換3000
(保存する行数はいくつでも)。これにより、それらの行がバッファにコピーされます。
次に、バッファをファイルに保存するには、次を使用します prefix + : もう一度、save-buffer filename.txt
+ return、filename
を好きなものに置き換えます。
(デフォルトでは prefix です ctrl + b。)
tmux 1.5の場合、capture-pane
コマンドは-S
および-E
を受け入れて、キャプチャの開始行と終了行を指定します。負の値を使用すると、履歴から行を指定できます。バッファにデータを入れたら、save-buffer
で保存できます。
以下は、ファイル名のプロンプトですべてをラップする(.tmux.conf
に適した)バインディングの例です。
bind-key P command-Prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
これは、32768行の履歴と現在表示されている行をキャプチャします。 tmux 1.6で始まり、ペインに32Kiラインより深い履歴(通常は最大2Giライン)がある場合、INT_MINまでの数字を使用できます。 tmux 2.0で始まるcapture-pane -S -
を使用して、「履歴の最初から開始する」ことを意味できます(つまり、ハードコードされた大きな負の数はありません)。
注:保存されたファイルの行数は、常にペインの履歴制限とその高さに等しいとは限りません。
ペインの履歴バッファがいっぱいになると、tmuxは、1行だけを破棄するのではなく、最も古い行の10%を破棄します。つまり、ペインの有効な履歴の深さは、設定された制限の90%になることがあります。
(tmuxプレフィックスキーを使用する代わりに)コマンドラインから実行できるものが必要な場合は、次のコマンドを実行してみてください。
tmux capture-pane -pS -1000000
実行しても何も実行されないように見える場合は、画面に表示されていたものをそのまま出力しているため、同じように見えます。
もちろん、それをファイルにパイプすることもできます。
tmux capture-pane -pS -1000000 > file.out
tmux
のマニュアルページを参照してcapture-pane
を検索します(色を保持したい場合のキャプチャエスケープシーケンスなど)、または複数の視覚的な線を結合するかどうかを指定新しい行を含めないでください)
@ jasonwryanの回答 とは少し異なるように見える標準のキーバインディングがあり、configで何も変更しませんでした。
以下は私のために働いたレシピです。 tmuxの設定を変更したくない場合や、スクロールバックの一部をすばやくコピーしたい場合に便利です。
Prefix == Ctrl+b 私のtmux(tmux 1.6、debian 7)で。
これを可能にするtmuxプラグインは次のとおりです。
https://github.com/tmux-plugins/tmux-logging
インストールしたら、prefix + alt-shift-p
を使用してスクロールバック全体を保存します。
これは実際には非常に簡単です。 prefix key
を押してから:
を押して、コマンドモードに入ります。次にcapture-pane -S -<line number you want to dump>
を実行してからsave-buffer <filepath>
を実行します
そのファイルには、すべてのスクロールバック出力が含まれています。安全上の理由から、後でバッファを削除する必要があります。
Tmuxセッションのすべてのスクロールバックをファイルに書き込むにはどうすればよいですか?
これを〜/ .tmux.confで使用し、実行中のシェルを終了すると、ペインの出力が一意のログファイルに保存されます。
set -g remain-on-exit
set-hook pane-died 'capture-pane -S - -E - ; save-buffer "$HOME/logs/tmux/tmux-saved.#{Host_short}-#{session_id}:#{window_id}:#{pane_id}-#{pane_pid}-#{client_activity}.log"; delete-buffer; kill-pane'