Wie kann ich den gesamten Scrollback in einer tmux-Sitzung in eine Datei schreiben?
capture-panel
kann den aktuellen Bildschirm erfassen, aber nicht den gesamten Scrollback.
Wie kann ich den gesamten Scrollback in einer tmux-Sitzung in eine Datei schreiben?
capture-panel
kann den aktuellen Bildschirm erfassen, aber nicht den gesamten Scrollback.
Antworten:
Dies hängt von dem Wert ab history-limit
, den Sie in Ihrem festgelegt haben .tmux.conf
- der Standardwert ist 2000; Wenn Sie mehr aufnehmen möchten, müssen Sie die Anzahl der Zeilen explizit festlegen.
Um den gesamten Bildlauf zu erfassen, rufen Sie den Kopiermodus auf, wählen Sie den gesamten Bildlauf aus, ziehen Sie ihn in den Puffer und fügen Sie ihn in Ihre Datei ein.
Wie Sie dies erreichen, hängt von der von mode-keys
Ihnen bevorzugten Option vi oder emacs ab. man tmux
hat eine hilfreiche Tabelle, die die jeweiligen Schlüssel beschreibt.
Ich habe Folgendes in meinem .tmux.conf
, um dies zu vereinfachen:
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
Der Vorgang zum Erfassen des vollständigen Bildlaufs ist dann:
PrefixEsc : um in den Kopiermodus zu gelangen
v : um mit der visuellen Auswahl zu beginnen (vorausgesetzt, Sie befinden sich bereits am unteren Bildschirmrand)
gg : um alles im Scrollback festzuhalten
y : um es in den Puffer zu ziehen
Prefixc : öffne ein anderes tmux Fenster
vim scrollback.txt
i : In vim in den Einfügemodus wechseln
Prefixp : Einfügen in Datei
Hier finden Sie auch eine Antwort, die beschreibt, wie Sie den Puffer mithilfexsel
dieser Funktion in eine temporäre Datei kopieren können.
:set paste
in vim verwenden, ignoriert vim das Hinzufügen von automatischen Einrückungen oder einfügebasierten Tastenkombinationen.
.tmux.conf
...
Für diejenigen, die nach einer einfachen Antwort suchen, verwenden Sie einfach prefix+ :und geben Sie capture-pane -S -3000
+ ein return(Ersetzen 3000
Sie diese durch die Anzahl der Zeilen, die Sie speichern möchten.) Dies kopiert diese Zeilen in einen Puffer.
Dann wird der Puffer in eine Datei zu speichern, verwenden Sie einfach prefix+ :wieder, und geben Sie in save-buffer filename.txt
+ returnund ersetzt filename
mit dem, was Sie möchten.
(Standardmäßig prefixist ctrl + b.)
save-buffer filename.txt
scheint die Datei zu speichern /
, nicht in pwd
(aktuelles Verzeichnis). Stattdessen habe ich einen absoluten Dateipfad angegeben und es hat wie ein Zauber
Mit tmux 1.5 capture-pane
akzeptiert -S
und -E
spezifiziert der Befehl die Start- und Endzeilen des Captures . Mit negativen Werten können Zeilen aus dem Verlauf angegeben werden. Sobald Sie die Daten in einem Puffer haben, können Sie sie mit speichern save-buffer
.
Hier ist eine Beispielbindung (geeignet für .tmux.conf
), die alles mit einer Eingabeaufforderung für den Dateinamen abschließt:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Dies erfasst (bis zu) 32768 Zeilen des Verlaufs sowie die aktuell angezeigten Zeilen. Ab tmux 1.6 können Sie Zahlen bis INT_MIN verwenden, wenn Ihr Fenster einen Verlauf aufweist, der tiefer als 32Ki-Zeilen ist (normalerweise bis zu 2Gi-Zeilen). Ab tmux 2.0 können Sie capture-pane -S -
mit "am Anfang der Geschichte beginnen" (dh keine große, fest codierte negative Zahl) beginnen.
Hinweis: Die Anzahl der Zeilen in der gespeicherten Datei entspricht nicht immer dem Verlaufslimit plus der Höhe des Bereichs.
Wenn der Verlaufspuffer eines Fensters voll ist, verwirft tmux die ältesten 10% der Zeilen, anstatt nur eine Zeile zu verwerfen. Dies bedeutet, dass die effektive Verlaufstiefe eines Fensters manchmal nur 90% des konfigurierten Grenzwerts beträgt.
tmux server-info | head -1
, um Ihre Version zu sehen. tmux -V
Funktioniert in tmux * 1.4 und höher.
[PrefixKey] :
, um zur tmux-Befehlszeile zu gelangen, und fügen Sie dann die gesamte Zeile ein [Prefix] P
.
Ich hatte Standardtastenbelegungen, die sich ein wenig von denen in @ jasonwryans Antwort unterschieden und an der Konfiguration nichts geändert haben.
Unten ist ein Rezept, das für mich funktioniert hat. Vielleicht finden Sie es nützlich, wenn Sie in tmux config keine Änderungen vornehmen und nur einen Teil des Scrollbacks schnell kopieren möchten.
Prefix== Ctrl+bin meinem tmux (tmux 1.6, debian 7).
Wenn Sie etwas möchten, das Sie über die Befehlszeile ausführen können (anstatt Ihre tmux-Präfixschlüssel zu verwenden), versuchen Sie Folgendes:
tmux capture-pane -pS -1000000
Wenn Sie es ausführen und es nichts zu tun scheint, liegt das daran, dass es genau das ausgibt, was sich gerade auf Ihrem Bildschirm befand, sodass es gleich aussieht.
Natürlich können Sie es auch in eine Datei umleiten:
tmux capture-pane -pS -1000000 > file.out
Sehen Sie sich die tmux
Manpage an und suchen capture-pane
Sie nach weiteren Möglichkeiten (z. B. Erfassen von Escape-Sequenzen für den Fall, dass Sie die Farbe beibehalten möchten, oder geben Sie an, ob mehrere visuelle Linien verbunden werden sollen, wenn sie keine neue Linie enthalten).
Hier ist ein tmux-Plugin, das dies ermöglicht:
https://github.com/tmux-plugins/tmux-logging
Speichern Sie nach der Installation den gesamten Scrollback mit prefix + alt-shift-p
.
Das ist eigentlich sehr einfach. Rufen Sie den Befehlsmodus auf, indem Sie prefix key
dann drücken :
. Dann mach capture-pane -S -<line number you want to dump>
Dannsave-buffer <filepath>
Diese Datei enthält die gesamte Scrollback-Ausgabe. Sie sollten den Puffer anschließend aus Sicherheitsgründen löschen.
Wie kann ich den gesamten Scrollback in einer tmux-Sitzung in eine Datei schreiben?
Ich verwende dies in meiner ~ / .tmux.conf und jetzt, wenn ich meine laufende Shell beende , wird die Fensterausgabe in einer eindeutigen Protokolldatei gespeichert:
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'