Kann ich sehen, was in einer Tmux-Sitzung vor sich geht, ohne mich daran zu beteiligen?

Kann ich sehen, was in einer Tmux-Sitzung vor sich geht, ohne mich daran zu beteiligen?

Ich verwende häufig, tmuxum eine Aufgabe zu starten, die eine Weile ausgeführt wird. Ich gehe in regelmäßigen Abständen zurück und überprüfe sie mit tmux -aund trenne dann die Verbindung, wenn sie noch nicht abgeschlossen ist, und überprüfe sie später erneut.

Gibt es eine Möglichkeit, nur einen kurzen Schnappschuss von dem zu sehen, was in der Sitzung passiert, ohne eine vollständige Verbindung herzustellen? Ich suche nach etwas, das theoretisch taildie Sitzung ausführen kann, um das letzte Stück der Ausgabe zu erhalten (aber wenn ich vermeiden kann, eine weitere Datei mit einer Kopie der Ausgabe zu erstellen, umso besser).

Vielleicht würde es auch funktionieren, es anzuhängen und sofort wieder abzutrennen. Ich versuche, Tastenanschläge zu sparen, vielleicht könnte ein solcher Befehl aus der Ferne ausgeführt werden,
z. B. ssh root@server tmux --tail?

Antwort1

Ich denke, capture-panees könnte Ihren Anforderungen entsprechen:

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

(Informationen zum Angeben eines Bereichs finden Sie unter „target-pane“ auf der Manpage.)

Standardmäßig gibt dieser Befehl den aktuellen Inhalt des angegebenen Fensters aus. Sie können einen Zeilenbereich angeben, indem Sie die Optionen -Sund verwenden -E(Start- und Endzeilennummern): Die erste Zeile ist 0 und negative Zahlen beziehen sich auf Zeilen aus dem „Zurückscrollen“-Verlauf des Fensters. Wenn Sie also hinzufügen, -S -10erhalten Sie die letzten zehn Zeilen des Verlaufs sowie den aktuellen Inhalt des Fensters.

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

Die -pOption wurde in 1.8 hinzugefügt. Wenn Sie eine frühere Version verwenden, können Sie stattdessen Folgendes tun:

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

Beachten Sie jedoch die Semikolons, wenn Sie diesen Befehl über ausführen, sshda die Remote-Shell eine zusätzliche Ebene der Shell-Interpretation hinzufügt (die Semikolons müssen als Argumente an die endgültigetmuxBefehl, sie dürfen weder von der lokalen noch von der Remote-Shell interpretiert werden).

Antwort2

Nicht wirklich. Ein Ansatz, der mir in den Sinn kommt, besteht darin, Ihren lang laufenden Prozess () zu starten $lrpund ihn dann in regelmäßigen Abständen, ohne erneutes Anhängen, list-windowsfür die entsprechende Sitzung auszuführen.

Irgendwann ändert sich der Name des tmux-Fensters mit $lrp wieder auf den Standardnamen, im Allgemeinen Ihre Shell, und Sie können sehen, dass $lrp abgeschlossen ist.

┌─[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)

verwandte Informationen