Kann ich sehen, was in einer tmux-Sitzung vor sich geht, ohne eine Verbindung herzustellen?

15

Oft starte ich tmuxdamit eine Aufgabe, die eine Weile ausgeführt wird. Ich gehe regelmäßig zurück und überprüfe es mit tmux -aund trenne dann die Verbindung, wenn es noch nicht abgeschlossen ist, und überprüfe es später erneut.

Gibt es eine Möglichkeit, nur eine kurze Momentaufnahme der Vorgänge in der Sitzung zu sehen, ohne sie vollständig anzuhängen? Ich bin auf der Suche nach etwas wie theoretisch tun ein tailauf der Sitzung, um das letzte Stück der Ausgabe zu erhalten (aber wenn ich vermeiden kann, eine andere Datei mit einer Kopie der Ausgabe zu erstellen, desto besser)

Vielleicht würde das Anbringen und sofortige Ablösen auch funktionieren. Ich versuche, Tastatureingaben zu speichern. Vielleicht könnte ein solcher Befehl aus der Ferne ausgeführt werden,
d. ssh root@server tmux --tailH.

cwd
quelle

Antworten:

16

Ich denke, capture-panekönnte Ihren Bedürfnissen entsprechen:

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

(Informationen zum Angeben eines Bereichs finden Sie unter „Zielbereich“ in der Manpage.)

Standardmäßig gibt dieser Befehl den aktuellen Inhalt des angegebenen Bereichs aus. Sie können eine Reihe von Linien angeben , indem Sie die Verwendung -Sund -EOptionen (Start- und End-Zeilennummern): die erste Zeile 0, und negative Zahlen beziehen sich auf Linien von der Scheibe der „zurückblättern“ Geschichte. Wenn -S -10Sie also hinzufügen, erhalten Sie die letzten zehn Zeilen des Verlaufs sowie den aktuellen Inhalt des Bereichs.

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

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

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

Beachten Sie jedoch diese Semikolons, wenn Sie diesen Befehl über absetzen , sshda die Remote-Shell eine zusätzliche Ebene der Shell-Interpretation hinzufügt (die Semikolons müssen als Argumente an den finalen tmux- Befehl übergeben werden, sie dürfen weder von der lokalen noch von der Remote- Shell interpretiert werden Schale).

Chris Johnsen
quelle
1
Du besitzt dieses Tag wirklich ... Tolle Antwort (wie immer).
Jasonwryan
Man kann auch -efür ANSI-Escapezeichen (Farbe usw.) hinzufügen . Das ergibt eine schöne Erinnerung-pet
fliegende Schafe
1

Nicht wirklich. Ein Ansatz, der in den Sinn kommt, besteht darin, den Prozess mit langer Laufzeit zu starten ( $lrp) und dann in regelmäßigen Abständen, ohne erneutes Anhängen, list-windowsfür die betreffende Sitzung zu starten .

Irgendwann wird der Name des tmux-Fensters mit $ lrp auf den Standardwert zurückgesetzt, in der Regel 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)
jasonwryan
quelle
gute Idee. Ich bin immer noch verwirrt $lrp- war das eine Variable, die Sie erwähnt haben? Können Sie ein Beispiel geben, wie es verwendet werden würde? nicht $lrpinman tmux
cwd
@ CWD Das ist nur ein Platzhalter für Ihren Prozess (sagen rsyncoder was auch immer) ... :)
Jasonwryan