Posso ver o que está acontecendo em uma sessão do tmux sem anexar a ela?

15

Freqüentemente usarei tmuxpara iniciar uma tarefa que estará em execução por um tempo. Periodicamente, voltarei e verificarei usando tmux -ae desconectarei se ainda não tiver sido concluído e verificarei novamente mais tarde.

Existe alguma maneira de ver um breve instantâneo do que está acontecendo na sessão sem anexar completamente? Estou procurando algo como teoricamente fazer um tailna sessão para obter o último bit de saída (mas se eu puder evitar criar outro arquivo com uma cópia da saída ainda melhor)

Talvez anexá-lo e retirá-lo imediatamente também funcionaria. Estou tentando salvar pressionamentos de teclas, talvez esse comando possa ser executado remotamente,
ou seja ssh root@server tmux --tail?

cwd
fonte

Respostas:

16

Eu acho que capture-panepode atender às suas necessidades:

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

(consulte “painel de destino” na página de manual para saber como especificar um painel)

Por padrão, esse comando despeja o conteúdo atual do painel especificado. Você pode especificar um intervalo de linhas usando as opções -Se -E(números de linha inicial e final): a primeira linha é 0 e os números negativos se referem às linhas do histórico de “rolagem para trás” do painel. Assim, a adição -S -10fornece as dez linhas mais recentes do histórico, além do conteúdo atual do painel.

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

A -popção foi adicionada no 1.8. Se você estiver executando uma versão anterior, poderá fazer isso:

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

Mas lembre-se desses pontos-e-vírgulas se você estiver emitindo esse comando, sshpois o shell remoto adicionará um nível adicional de interpretação de shell (os pontos-e-vírgulas precisam ser passados ​​como argumentos para o comando tmux final , eles não devem ser interpretados pelo local ou pelo remoto Concha).

Chris Johnsen
fonte
1
Você realmente possui essa tag ... Ótima resposta (como sempre).
jasonwryan
Também se pode adicionar -eescapes ANSI (cores e assim por diante). Isso cria um bom mnemônico-pet
ovelha voadora
1

Na verdade não. Uma abordagem que vem à mente é iniciar seu longo processo de execução ( $lrp) e, periodicamente, sem reconectá-lo, executando list-windowsa sessão relevante.

Em algum momento, o nome da janela do tmux com $ lrp voltará ao padrão, geralmente seu shell, e você poderá ver que o $ lrp foi concluído.

┌─[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
fonte
boa ideia. Ainda estou confuso sobre isso $lrp- essa foi uma variável que você mencionou? você pode dar um exemplo de como seria usado? não vi $lrplistado emman tmux
cwd 17/11
@cwd Isso é apenas um espaço reservado para o seu processo (por exemplo rsync, ou o que for) ... :)
jasonwryan