
Ich verwende häufig, tmux
um 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 -a
und 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 tail
die 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-pane
es 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 -S
und 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 -10
erhalten Sie die letzten zehn Zeilen des Verlaufs sowie den aktuellen Inhalt des Fensters.
tmux capture-pane -pt "$target-pane" -S -10
Die -p
Option 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, ssh
da 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 $lrp
und ihn dann in regelmäßigen Abständen, ohne erneutes Anhängen, list-windows
fü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)