Ich verwende den Befehl "log" des Bildschirms in großem Umfang, um die Ausgabe einer Sitzung in einer Datei zu protokollieren, wenn ich Änderungen in einer bestimmten Umgebung vornehme. Ich habe die Manpage von tmux durchsucht, aber keine Entsprechung gefunden. Kennt jemand eine ähnliche Funktion in tmux oder muss ich dafür eigene Wrapper-Skripte schreiben?
BEARBEITEN: Mir sind Skripte und andere Hilfsprogramme bekannt, mit denen ich eine Sitzung protokollieren kann. Der Grund, warum die Funktionalität des Bildschirms so nützlich ist, ist die Möglichkeit, eine Protokolldateivariable zu definieren, die Zeichenfolgen-Escape-Zeichen verwendet, um jede Sitzung eindeutig zu identifizieren.
ZB habe ich eine Shell-Funktion, die unter Angabe eines Hostnamens in einem neuen Bildschirmfenster SSH für diesen Host ausführt und den Fenstertitel auf den Hostnamen setzt. Wenn ich ein Protokoll dieser Sitzung starte, wird der Fenstertitel vorangestellt.
Wenn diese Funktion in tmux nicht vorhanden ist, muss ein neuer Satz von Shell-Funktionen erstellt werden, um "Skripte" für Sitzungen einzurichten, die ich protokollieren möchte. Dies ist nicht sehr schwierig, aber es lohnt sich möglicherweise nicht, da der Bildschirm genau das tut, was ich bereits brauche.
quelle
tmux pipe-pane …
Befehl in Ihr Kommando aufzunehmendefault-command
(dh bevor Sie eine Shell starten). Das würde natürlich nur für "Standard" -Bereiche funktionieren (nichts begann mit expliziten Befehlen, znew-window sqlite3
. B. ). Es gab Hinweise darauf, dass "Hook" -Unterstützung in einer zukünftigen Version von tmux landen könnte . Dies kann dazu führen, dass Sie einen Befehl konfigurieren (z. B.pipe-pane …
), der nach einem anderen Befehl automatisch ausgeführtnew-session
wirdnew-window
, odersplit-pane
).read
unddate
diese anordnen. ZBbind-key H pipe-pane -o 'exec bash -c "while IFS= read -r line; do echo \"\$(date +%%Y%%m%%dT%%H%%M%%SZ%%z): \$line\"; done" >>$HOME/"#W-tmux.log"'
date
für jede Ausgabezeile zu erstellen, wird ein schwerwiegender Leistungseinbruch sein! Viel besser zuprintf '%(%Y%m%dT%H%M%S)T: %s\n' "$line"
(Escape-Zeichen, wenn dies für die Aufnahme in eine tmux-Konfigurationsdatei erforderlich ist, wodurch%s
das"
s vermutlich verdoppelt und escape-Zeichen verwendet werden ).Hier ist ein tmux-Plugin, mit dem Sie sich anmelden können, ohne sich mit Tastenkombinationen herumschlagen zu müssen
.tmux.conf
:https://github.com/tmux-plugins/tmux-logging
Eigenschaften:
prefix + P
Schaltet die Fensterprotokollierung um. Die Ausgabe wird von unerwünschten ANSI-Zeichen gelöscht!prefix + Alt + P
Speichert den vollständigen Fensterverlauf in einer Dateiquelle
Nachdem ich die Dokumentation für tmux durchgesehen habe, kann ich keine Entsprechung der Fensterprotokollierung des Bildschirms finden. Es sieht so aus, als müssten Sie Ihre Shell-Funktionen verwenden, um das zu tun, was Sie möchten, oder einfach nur den Bildschirm verwenden. Sie können das Debuggen aktivieren, bei dem sowohl die Server- als auch die Client-Seite protokolliert werden, es enthält jedoch auch viele externe tmux-bezogene Protokolle, sodass es nicht genau das ist, wonach Sie fragen.
Sie könnten möglicherweise die Zwischenablage von tmux verwenden, um das Speichern des Puffers in einer anderen Sitzung zu automatisieren, die so eingerichtet ist, dass sie den Inhalt der Zwischenablage akzeptiert und in einer Datei speichert. Das scheint irgendwie hackisch.
quelle
Ich mache es mit Skript, das ist aus meiner tmux.conf-Datei
quelle
log
Befehl des Bildschirms , der die sofortige Protokollierung ermöglicht. Wenn Sie sich jedoch in tmux befinden und die Bildschirmprotokollierung verwenden möchten, müssen Sie trotzdem eine neue Shell starten.