Remova BS e ESC dos arquivos de log

2

Sempre que eu uso o comando script para gravar as teclas que eu digito ou quando eu ativo o modo de registro em screen , todas as teclas pressionadas BS (Backspace) e ESC (Escape) também são incluídas no arquivo. por exemplo: cd ~/foo/tpBSBStmp .

Existe uma maneira de remover automaticamente o BS ou o ESC do arquivo para que o comando gravado final incluído no arquivo seja cd ~/foo/tmp ?

Btw, isso também acontece no recurso de log do Putty.

Estou aberto a qualquer script que remova os caracteres indesejados ou até mesmo outros comandos que façam o mesmo trabalho

    
por Bingo 01.06.2014 / 23:32

3 respostas

3

A saída de script sempre conterá feeds de linha, backspaces e sequências de escape ANSI, conforme indicado na manpage. Exemplos de programas que exibirão corretamente todos esses são cat e more . cat typescript e more typescript exibirão os textos digitados exatamente como foram quando você os registrou.

Se você ainda quiser limpar os textos digitalizados, dê uma olhada no este script. É um script em Perl que eu encontrei há algum tempo que é feito especificamente para limpar os datilografados feitos com script .

Experimente executando script-declutter myTypescript > cleanTypescript

Espero que isso ajude.

Editar: Não é realmente relacionado à resposta, mas você pode estar interessado em TermRecord . Ele cria uma representação HTML e Javascript organizada de suas sessões de terminal para que qualquer pessoa possa visualizá-las sem qualquer conhecimento de como lidar com os datilografados. Tudo o que eles precisam é de um navegador da Web.

    
por 02.06.2014 / 04:09
0

Se você usar o argumento -vte para cat , ele escapará dos códigos de terminal.

por exemplo,

cat -vte myfile
    
por 14.10.2014 / 10:45
0

O link para script-declutter não está funcionando, mas é exibido em uma página da Web :

#!/usr/bin/perl -wp

# clean up control characters and other non-text detritus that shows up
# when you run the "script" command.

BEGIN {
# xterm titlebar escape sequence
$xtermesc = "\x1b\x5d\x30\x3b";

# the occurence of a backspace event (e.g. cntrl H, cntrol W, or cntrl U)
$backspaceevent = "\x1b\\x5b\x4b"; # note escaping of third character

# ANSI color escape sequence
$ansiesc = qr/\x1b\[[\d;]*?m/;

# technically, this is arrow-right. For some reason, being used against
# very long backspace jobs. I don't fully understand this, as evidenced
# by the fact that is off by one sometimes.
$bizarrebs = qr/\x1b\[C/;

# used as part of the xterm titlebar mechanism, or when
# a bell sounds, which might happen when you backspace too much.
$bell = "\x07"; # could use \a

$cr = "\x0d"; # could use \r

$backspace = "\x08"; # could use \b
}

s/$xtermesc.+?$bell//g;
s/[$cr$bell]//g;
s/${backspaceevent}//g;
s/$ansiesc//g;
while (s/(.)(?=$backspace)//) { s/$backspace//; } # frickin' sweet
# For every ^H delete the character immediately left of it, then delete the ^H.
# Perl's RE's aren't R, so I wonder if I could do this in one expression.
while (s/(..)(?=$bizarrebs)//) { s/$bizarrebs//; }

# notes
# ^[[7P has been spotted. Based on http://www.google.com/codesearch/p?hl=en#4qbG402gtc0/myScreen.C&q="[7P" it appears to be a numbered cursor jump, moving 7 characters (not sure if left or right).

É um pouco mais complicado do que alguns outros exemplos, embora alguns comentários estejam em ordem:

  • é responsável pelo uso de sequências de escape de cursor-esquerda usadas na edição de linhas de bash (em parte: o autor parecia assumir que é usado da mesma forma que backspace em vez de seu uso real para mover o cursor dentro de texto é não alterado).
  • não considera os retornos de carro incorporados como usados por yum para seu medidor de progresso.
  • sua noção de seqüências de escape a serem removidas é limitada aos escapes do SGR (terminando com m ), e ignora os modos que terminam com h ou l .

Para um script (mais curto) que faça os dois últimos (mas ainda não o cursor esquerdo), veja minha resposta para uma pergunta mais antiga

como registrar corretamente a saída de um programa de console que atualiza freqüentemente" partes "da tela, resultando em um arquivo de log confuso?

    
por 28.04.2016 / 00:58