Puis-je voir ce qui se passe dans une session tmux sans y attacher?

16

Souvent, je vais utiliser tmuxpour démarrer une tâche qui s'exécutera pendant un certain temps. Je reviendrai périodiquement et vérifierai à l'aide de tmux -a, puis je me déconnecterai s'il n'est toujours pas terminé et vérifierai plus tard.

Existe-t-il un moyen de simplement voir un bref instantané de ce qui se passe dans la session sans s'y attacher complètement? Je cherche quelque chose comme théoriquement faire un tailsur la session pour obtenir le dernier bit de sortie (mais si je peux éviter de créer un autre fichier avec une copie de la sortie, tant mieux)

Peut-être que l'attacher et le faire détacher immédiatement fonctionnerait également. J'essaie de sauvegarder les frappes, peut-être qu'une telle commande pourrait être exécutée à distance,
c'est ssh root@server tmux --tail-à- dire ?

cwd
la source

Réponses:

17

Je pense que cela capture-panepourrait convenir à vos besoins:

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

(voir «cible-volet» dans la page de manuel pour les façons de spécifier un volet)

Par défaut, cette commande videra le contenu actuel du volet spécifié. Vous pouvez spécifier une plage de lignes à l'aide des options -Set -E(numéros de ligne de début et de fin): la première ligne est 0 et les nombres négatifs se réfèrent aux lignes de l'historique de «défilement arrière» du volet. L'ajout -S -10vous permet d'obtenir les dix lignes d'historique les plus récentes ainsi que le contenu actuel du volet.

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

L' -poption a été ajoutée en 1.8. Si vous exécutez une version antérieure, vous pouvez le faire à la place:

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

Mais faites attention à ces points-virgules si vous exécutez cette commande via, sshcar le shell distant ajoutera un niveau supplémentaire d'interprétation du shell (les points-virgules doivent être passés comme arguments à la commande tmux finale , ils ne doivent pas être interprétés par le local ou le distant). coquille).

Chris Johnsen
la source
1
Vous possédez vraiment ce tag ... Excellente réponse (comme d'habitude).
jasonwryan
On peut également ajouter -epour les échappements ANSI (couleur et ainsi de suite). Cela fait une belle mnémonique-pet
vol de moutons
1

Pas vraiment. Une approche qui vous vient à l'esprit consiste à démarrer votre processus de longue durée ( $lrp) puis, périodiquement, sans réattacher, à exécuter list-windowspour la session concernée.

À un moment donné, le nom de la fenêtre tmux avec $ lrp reviendra à la valeur par défaut, généralement votre shell, et vous pourrez voir que $ lrp est terminé.

┌─[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
la source
bonne idée. $lrpCependant, je suis toujours confus - était-ce une variable que vous avez mentionnée? pouvez-vous donner un exemple de la façon dont il serait utilisé? n'a pas vu $lrpdansman tmux
cwd
@cwd C'est juste un espace réservé pour votre processus (par exemple rsync) ... :)
jasonwryan