Posso salvar a saída de um comando de terminal anterior usando apenas o teclado?

11

Eu passei as últimas duas horas executando um comando dd <(ou imagine qualquer cenário "difícil de refazer" semelhante) de um live CD sem uma GUI; tudo o que tenho é o meu confiável terminal multi-janela " CTRL+ALT+F# ".

Ai, durante o comando dd joguei várias mensagens de erro desagradáveis e um pouco mais de informações que gostaria de manter. Tenho uma unidade USB conectada à qual posso gravar dados, mas como obtenho a saída anterior salva como um arquivo de texto depois que o comando já foi executado?

Se este fosse um emulador de terminal dentro de uma boa GUI, eu teria simplesmente usado meu mouse para selecionar o texto, copiá-lo e colá-lo em um documento. E se eu soubesse que o comando teria produzido erros, eu teria canalizado para um arquivo para começar, mas, infelizmente, a saída adicional foi uma surpresa.

Como faço para salvar a saída de texto do meu comando anterior em um arquivo sem re-executar o comando? Isso é possível?

    
por IQAndreas 17.03.2015 / 00:18

2 respostas

15

Um kernel do Linux deve armazenar um log na tela para seus vts no dispositivo /dev/vcsa*[ttynum] correspondente.

É por isso que os seguintes trabalhos:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

... que imprime ...

hey       

O dispositivo /dev/vcsa[ttynum] correspondente armazenará uma versão codificada do texto formatado na tela, enquanto o /dev/vcs[ttynum] será um dump simples. Os dispositivos vcsa[ttynum] codificarão um par de bytes que descrevem cada caractere na tela e seus atributos, bem como uma string na cabeça de cada página lógica que indica as linhas linhas, colunas do referenciado tty .

Como @kasperd aponta, eu estava errado antes, assumindo que o \a BEL foi codificado entre cada caractere, quando na verdade: A combinação de cores padrão coincide com o caractere da campainha.

Para seus objetivos, usar o /dev/vcs[ttynum] é provavelmente mais fácil. Aqui está um l ook nas diferenças:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

... imprime ...

hey       $

... e ...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

... imprime ...

00
echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2
0
hey       
4h\ae\ay\a$
    
por 17.03.2015 / 00:40
2

Vá para (/ faça login) em outro terminal e execute sudo screendump N > screenoutput.txt , onde N é o número do terminal que você deseja.

Não há atrasos, receio. Se esses consoles virtuais mantêm um, eu nunca vi isso. Mas você fica com tudo o que pode ver nesse terminal.

    
por 17.03.2015 / 00:33