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?

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.


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.


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


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.


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.


-2

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

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


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.


3
Infelizmente, isso apenas salva a parte VISÍVEL da tela, não o buffer de rolagem.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.