How can I write all the scrollback in a tmux session to a file?
capture-panel
can grab the current screen, but not the entire scrollback.
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityHow can I write all the scrollback in a tmux session to a file?
capture-panel
can grab the current screen, but not the entire scrollback.
This depends on the value of history-limit
that you have set in your .tmux.conf
- the default is 2000; if you wish to capture more, you will need to explicitly set the number of lines.
To capture the entire scrollback, enter copy mode, select the entire scrollback, and yank it into the buffer, then paste it into your file.
How you accomplish this will depend on the mode-keys
option you prefer, vi or emacs. man tmux
has a helpful table describing the respective keys.
I have the following in my .tmux.conf
to simplify this:
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
The process for capturing the full scrollback is then:
PrefixEsc : to enter copy mode
v : to begin visual selection (assuming you are already at the bottom of the screen)
gg : to capture everything in the scrollback
y : to yank it into the buffer
Prefixc : open another tmux window
vim scrollback.txt
i : enter insert mode in vim
Prefixp : paste into file
There is also an answer here describing how to copy the buffer to a temporary file using xsel
that might be useful.
:set paste
in vim, vim will ignore adding automatic indentations or any insert-based keybindings.
– tlunter
Feb 4 '15 at 21:18
.tmux.conf
...
– jasonwryan
Nov 5 '15 at 17:14
For those looking for a simple answer, just use prefix + :, then type in capture-pane -S -3000
+ return (Replace 3000
with however many lines you'd like to save.) This copies those lines into a buffer.
Then, to save the buffer to a file, just use prefix + : again, and type in save-buffer filename.txt
+ return, replacing filename
with whatever you'd like.
(By default prefix is ctrl + b.)
save-buffer filename.txt
seems to save the file in /
, not in pwd
(current directory). Instead, I provided an absolute file path and it worked like a charm
– MohamedEzz
Dec 8 '16 at 9:54
With tmux 1.5, the capture-pane
command accepts -S
and -E
to specify the start and end lines of the capture; negative values can be used to specify lines from the history. Once you have the data in a buffer, you can save it with save-buffer
.
Here is an example binding (suitable for .tmux.conf
) that wraps it all up with a prompt for the filename:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
This captures (up to) 32768 lines of history plus the currently displayed lines. Starting with tmux 1.6, you can use numbers down to INT_MIN if your pane has a history that is deeper than 32Ki lines (usually up to 2Gi lines). Starting in tmux 2.0, you can use capture-pane -S -
to mean “start at the beginning of history” (i.e. no large, hard-coded negative number).
Note: The number of lines in the saved file will not always be equal to the pane’s history limit plus its height.
When a pane’s history buffer is full, tmux discards the oldest 10% of the lines instead of discarding just one line. This means a pane’s effective history depth will sometimes be as low as 90% of its configured limit.
-S
to capture-pane
(it appears to be 1.3-2, although that's from dpkg
, as I can't figure out how to get tmux to show me a version number…)
– David Wolever
Dec 12 '11 at 5:40
tmux server-info | head -1
to see your version. tmux -V
works in tmux* 1.4 and later.
– Chris Johnsen
Dec 12 '11 at 8:03
[PrefixKey] :
to get to the tmux command line, and then paste the whole line, then you just do a [Prefix] P
it is capital P and you are good to go.
– Ali
Dec 17 '13 at 21:43
If you want something you can run from the command line (instead of using your tmux prefix keys), try running:
tmux capture-pane -pS -1000000
If you run it and it seems to not do anything, that's because it's outputting exactly what was just on your screen, so it looks the same.
Of course, you can also pipe it into a file:
tmux capture-pane -pS -1000000 > file.out
See the tmux
man page and search for capture-pane
for more things you can do (like capture escape sequences in case you want to preserve color, or specify whether you want multiple visual lines to be joined when they don't contain a new line)
tmux capture-pane -t {top} -pS -1000 > ~/tmp.out
– Adverbly
Jul 27 '20 at 13:57
I had standard key bindings which appeared to be a bit different than in @jasonwryan's answer and didn't change anything in config.
Below is recipe that worked for me. Maybe you will find it useful if you don't want to make any changes in tmux config and just want to quickly copy some of the scrollback.
Prefix == Ctrl+b in my tmux (tmux 1.6, debian 7).
Here's a tmux plugin that enables this:
https://github.com/tmux-plugins/tmux-logging
After you install it, save the entire scrollback with prefix + alt-shift-p
.
This is actually very easy.
Enter the command mode by press prefix key
then :
.
Then do capture-pane -S -<line number you want to dump>
Then save-buffer <filepath>
That file contains all the scrollback output. You should delete the buffer afterwards for safety reason.
How can I write all the scrollback in a tmux session to a file?
I use this in my ~/.tmux.conf, and now when I exit my running shell, pane output is saved to unique log file:
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'
How can I write all the scrollback in a tmux session to a file?
From the manual: ‘-’ to -S is the start of the history
.
So
tmux capture-pane -pS - > file
This will "write all the scrollback in a tmux" pane.
For all pane's in the session, you can try to loop through all the panes with tmux list-panes -s ...
If that's what you needed, I might update this answer.
Dump to a file and automatically open the file in vim
This is sweet:
bind-key v 'capture-pane' \; \
capture-pane -S - \; \
save-buffer /tmp/tmux \; \
delete-buffer \; \
send-keys Escape 'ddivim /tmp/tmux' Enter
It supposes that your shell is in vi mode, so that:
dd
clears any existing commandi
goes into insert modevim /tmp/tmux
Tested in tmux 3.0.