Copiando o buffer de rolagem da tela GNU para um arquivo (cópia impressa estendida)

188

Como copio facilmente o buffer de rolagem do GNU Screen para um arquivo? Ou seja, uma versão mais poderosa do comando 'cópia impressa'?

Na tela GNU, posso usar " Ctrl+ A Esc" para inserir o buffer de rolagem. Eu poderia marcar o buffer inteiro e usar " Ctrl+ A Ctrl+ ]" para colá-lo em um buffer Emacs , salvando-o em um arquivo.

No entanto, isso é tedioso. Existe um comando de tela que simplesmente copia o buffer de rolagem para um arquivo, como 'cópia impressa' faz para a parte visível da tela?

Peter Mortensen
fonte

Respostas:

284

Para gravar todo o conteúdo do buffer de rolagem em um arquivo, digite

Ctrl+ Ae : para acessar o modo de comando,

hardcopy -h <filename>

Nas versões mais antigas do screen, se você apenas o fizer hardcopy -h, ele apenas grava no arquivo -h. Isso foi corrigido na versão 4.2.0, portanto, hardcopy -hgrava para hardcopy.Nonde Nestá o número da janela atual.

Conta
fonte
1
Observe que o arquivo é salvo no diretório inicial - pelo menos para mim. Obrigado pela resposta, btw!
Ritesh
2
@ allrite: Ele é salvo em $ PWD (se você não der o fullpath), não há comportamento especial.
Pushpendre 23/03
9
Sim, mas ele é salvo na tela $ PWD onde você iniciou . Não está na $ PWD da sessão de tela.
Seumasmac 4/04
7
Observe que, se você tiver um buffer de rolagem longo e não houver muito, o arquivo salvo poderá parecer vazio porque as primeiras dezenas ou centenas de linhas estão em branco e o conteúdo está no final.
Terry Brown
3
Mais uma observação sobre o local em que a cópia impressa é salva: se você fizer um cd em um diretório e depois screen -rse reconectar a uma sessão existente, a cópia impressa não será salva no diretório ativo dentro da tela ou na que você estava antes de usar screen -r. Eu acho que ele é salvo no diretório em que você estava quando iniciou a sessão de tela. Você pode alterar isso com o comando hardcopydir .
Matthias Fripp
25

Pressione Ctrl+ A : bufferfile /tmp/somefile.txt ENTER e, em seguida, Ctrl+A >

Isso gravará o conteúdo atual do buffer no arquivo nomeado.

Roshan
fonte
Eu tentei isso, e o "ctrl-a>" diz "Nada aconteceu". A primeira etapa disse "Bufferfile agora é '/tmp/foo.txt'", mas nem parece criar esse arquivo.
1
Tem certeza de que copiou algo no buffer da tela usando Ctrl + A [? Parece que o buffer pode estar vazio - não irá copiar todo o buffer scrollback, apenas a parte que você selecionou usando Ctrl + A [
Roshan
2
Ah, eu estava procurando um atalho para copiar o buffer inteiro sem usar ctrl-a [
12

TL; DR: ^A:writebuf <filename>

O OP parece querer uma maneira de usar a parte selecionada do buffer que você obtém ao fazer um ^ A [, selecionando o texto usando o espaço como início e fim e, em vez de usar ^ A] para colar, salve a parte selecionada resultante do buffer para um arquivo.

Isso funcionou:

^A:writebuf <filename>

Nota: um 'f' no writebuf

Kevin Mullet
fonte
1
Não não. O OP deseja salvar o buffer INTEIRO, não apenas a parte selecionada. - OP
2
Ratos! Faltou por tanto
Kevin Mullet
4
Esta postagem ainda é útil. Bom trabalho.
23716 Justin E #
1
Descobri que para fazer este trabalho na versão MacOSX da tela eu tive que usar um caminho abolute (ie: /Users/user1/path/to/file.txt)
jhrf
6

Tente hardcopy -hincluir o buffer inteiro.

Jorge Gutierrez
fonte
2
Isso só faz uma cópia impressa no arquivo ~ / -H
2
@ barrycarter: Isso pode ter mudado nas versões mais recentes. Na tela 4.03.01, hardcopy -hescreve para hardcopy.Nonde Nestá o número da janela atual.
Keith Thompson
4

Isso funcionou para mim:

Entre no modo de edição ( ~) e digite:

:hardcopy -h buff_file

Ele criou um arquivo enorme, dos quais 98% estavam vazios, mas meus logs estavam totalmente presentes nos 2% restantes.

freeninza
fonte
-2

Ctrl+ A, :E emitir 'log on' o comando.

Ou defina-o como padrão no seu arquivo .screenrc como 'deflog on'.

brianray
fonte
2
Eu acho que isso só começa a registrar tudo depois que eu executo esse comando. Não quero registrar tudo (muito detalhado). Eu só quero capturar o buffer de rolagem como um arquivo.
-3

Do Ctrl+ A, H.

Que salva a tela atual em um arquivo de cópia impressa, por exemplo, hardcopy.0 para a tela 0. Parece ser uma maneira mais rápida do que ir Ctrl+ A, :e digitando o impresso de comando.

Jeff
fonte
3
Infelizmente, isso apenas salva a parte VISÍVEL da tela, não o buffer de rolagem.