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


12

Passei as últimas duas horas executando um ddcomando (ou imagine qualquer cenário "difícil de refazer") a partir de um CD ao vivo sem uma GUI; tudo o que tenho é o meu confiável CTRL+ALT+F#terminal Bash com "várias janelas" ( ).

Infelizmente, durante o comando ddlançamos várias mensagens de erro desagradáveis ​​e um pouco mais de informações que eu gostaria de manter. Tenho uma unidade USB conectada na qual posso gravar dados, mas como faço para salvar a saída anterior como um arquivo de texto depois que o comando já foi executado?

Se esse fosse um emulador de terminal dentro de uma interface gráfica agradável, eu simplesmente teria usado o mouse para selecionar o texto, copiá-lo e colá-lo em um documento. E se eu soubesse que o comando teria produzido erros, eu o teria encaminhado para um arquivo, mas, infelizmente, a saída adicional foi uma surpresa.

Como salvar a saída de texto do meu comando anterior em um arquivo sem executar novamente o comando? Isso é possível?


Eu tenho procurado maneiras de selecionar texto na tela, mas até agora só estou encontrando maneiras de fazer isso usando o texto digitado no prompt.
IQAndreas

Você já tentou usar o redirecionamento de saída?
eyoung100

2
@ eyoung100 Essa é outra palavra para "tubulação"? Como em dd if=/dev/sda of=/backups/sda.img > result.txt. Nesse caso, o problema é que eu já executei o ddcomando . A todo custo, desejo evitar executar o comando novamente, o que em algumas situações é impossível.
IQAndreas

2
Supondo que este seja o Linux: instale o gpm . (Inicie se necessário, por exemplo service start gpm). Varra uma região enquanto mantém pressionado o botão esquerdo do mouse. Digite cat > outputfilee clique no botão direito do mouse para colar a região que você acabou de selecionar.
Mark Plotnick

1
Se o objetivo é apenas "manter ... [as] informações", um último recurso é pegar uma câmera e tirar uma foto da tela. (E, teoricamente, você poderia então executar OCR sobre isso.)
Scott

Respostas:


15

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

É por isso que o seguinte funciona:

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

... que imprime ...

hey       

O /dev/vcsa[ttynum]dispositivo correspondente armazenará uma versão codificada do texto formatado na tela, enquanto o arquivo /dev/vcs[ttynum]será um despejo simples. Os vcsa[ttynum]dispositivos codificarão um par de bytes que descrevem cada caractere na tela e seus atributos, bem como uma sequência no início de cada página lógica que indica as linhas e colunas das linhas referenciadas .

Como @kasperd aponta, eu errei antes ao assumir que o \aBEL estava codificado entre todos os caracteres, quando na verdade: a combinação de cores padrão coincide com o caractere de campainha.

Para seus propósitos, usar o /dev/vcs[ttynum]provavelmente é mais fácil. Aqui está uma lolhada 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 ...

0\200\000\004h\ae\ay\a$

1
vcsanão coloca o mesmo caractere entre todos os caracteres. Ele fornece pares de bytes informando qual caractere está na tela e qual cor ele possui. A combinação de cores padrão coincide com o caractere da campainha.
kasperd

@kasperd - obrigado. É melhor?
mikeserv

Isso é melhor. 👍
kasperd 17/03/2015

2

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

Sem atraso, eu temo. Se esses consoles virtuais mantêm um, eu nunca o vi. Mas você recebe tudo o que pode ver nesse terminal.


se funcionar, provavelmente é porque o pega de /dev/vcsa*[1-9]*- (que é o que eu acho que as permissões de superusuário são) . Os consoles linux também suportaram uma lista de pendências para a maioria das séries 3. *, eu acho. Não tenho certeza de como alguém pode pegá-lo (ao contrário de usar os /dev/vcsa*[1-9]*dispositivos), mas talvez haja uma maneira.
mikeserv

É melhor não mudar para um console diferente, pois a troca apaga a lista de pendências, mantendo apenas o que está atualmente visível na tela.
Gilles 'SO- stop be evil'

@mikeserv Sim. Bem, a página de manual parece dizer que usa ambos /dev/vcs$i e /dev/vcsa$i. Dá um resultado legível embora. ;-)
The Sidhekin

@ Gilles Ah, então existe um atraso? Mas screendumpnão chega, mesmo que eu permaneça no mesmo console.
O Sidhekin

1
Você pode ver a rolagem digitando Shift-PageUp uma ou mais vezes. Não conheço uma maneira de capturar o texto no scrollback, além de usar o mouse via gpm.
Marque Plotnick
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.