Eu tenho um script em execução a longo prazo e esqueci de redirecionar sua saída para um arquivo. Eu posso vê-lo em um terminal, mas posso salvá-lo em um arquivo?
Eu não estou pedindo tee
, redirecionamento de saída (por exemplo >
, >>
) etc - o comando foi iniciado e não posso executá-lo novamente. Eu preciso salvar a saída já gerada. Se eu conseguir vê-lo no meu monitor, ele está em algum lugar armazenado / armazenado em cache / em buffer. Onde?
screendump
, /dev/vcsX
e assim por diante permitem salvar apenas a última tela na saída do terminal (não o atual! - o terminal de rolagem não ajuda).
Este é um console virtual Linux, não um emulador de terminal X11, como o gnome-terminal
mouse e outras guloseimas.
/dev/
, certo? Caso contrário, você escreveu como alcançá-lo.Respostas:
/dev/vcs[a]<n>
você receberá a última tela cheia, mesmo se você tiver rolado a tela para cima, mas as seleçõesioctl()
usadas porgpm
ele permitirão que você despeje a tela exibida no momento, mesmo quando você rolou a tela para cima.Então você pode fazer:
Ajuste o 80 e o 25 para a largura e altura reais da tela.
A
sleep 3
dá-lhe tempo para rolar para cima (com Shift+PageUP) para a tela real que você deseja despejar.cat > file
redireciona a pasta parafile
. Terminar com Ctrl+D.Veja
console_ioctl(4)
para detalhes.Se você
gpm
instalou e está executando, pode fazer essa seleção com o mouse.A rolagem e seleção do console virtual do Linux são muito limitadas e bastante irritantes (quando você alterna o console, você perde a rolagem inteira). No futuro, sugiro que você use coisas como o GNU
screen
outmux
dentro dele (eu pessoalmente as uso em terminais ainda mais capazes). Com eles, é possível obter retornos de rolagem pesquisáveis maiores e despejá-los facilmente em arquivos (e até registrar toda a saída do terminal, além de todos os outros itens fornecidos com esses multiplexadores de terminal).Quanto à automação do processo para despejar todo o buffer de rolagem, deve ser possível em algumas condições, mas bastante difícil, pois a API é muito limitada. Há um documento não documentado
ioctl
(TIOCLINUX, subcódigo = 13) para rolar o console virtual atual em algum deslocamento (negativo para rolar para cima, positivo para rolar para baixo).No entanto, não há como (que eu saiba) saber o tamanho atual do buffer de rolagem. Portanto, é difícil saber quando você alcançou o topo desse buffer. Se você tentar rolar além, a tela não será alterada tanto e não há uma maneira confiável de saber quanto a tela realmente rolou.
Também acho o comportamento da rolagem ioctl irregular (pelo menos com o console VGA), em que a rolagem em menos de 4 linhas funciona apenas ocasionalmente.
O script abaixo parece funcionar para mim nos consoles de buffer de quadro (e ocasionalmente nos de VGA), desde que o buffer de rolagem não contenha sequências de linhas idênticas com mais de uma tela e mais uma linha.
É muito lento porque rola uma linha de cada vez e precisa aguardar 10 ms pelo eof ao ler cada despejo de tela.
Para ser usado a
that-script > file
partir do console virtual.fonte
https://github.com/jerome-pouiller/reredirect/ pode ser uma opção?
Descrição:
A sintaxe é a seguinte:
fonte