Caracteres estranhos quando a saída de 'ls' é redirecionada para um arquivo

2

Eu quero listar os componentes do diretório de trabalho atual em um arquivo de texto

ls -1 > textfile

A saída parece bem com mais.

1010661085645
1010729039145
1010747080245
1010849051345
1010859053445
1011046075845

No entanto, quando vejo este arquivo de texto com o emacs, vários caracteres estranhos aparecem

[0m[01;34m1010661085645[0m
[01;34m1010729039145[0m
[01;34m1010747080245[0m
[01;34m1010849051345[0m
[01;34m1010859053445[0m
[01;34m1011046075845[0m

Alguém pode explicar o que está acontecendo aqui?

    
por moadeep 13.02.2014 / 10:51

2 respostas

7

Esses "caracteres estranhos" são seqüências de escape para colorir a saída.

Isso imprimirá esse número na cor azul:

echo -e '3[01;34m10107290391453[0m'

Veja man console_codes para mais detalhes.

Você pode dizer a ls em que casos deve produzir cores:

   --color[=WHEN]
          colorize the output; WHEN can be 'never', 'auto', or 'always' (the default); more info below

Parece que seu ls é, na verdade, um alias para ls --color=always . (Digite type ls para verificar.)

Normalmente, ls --color=auto fará a coisa certa: imprimirá cores na tela, mas não em arquivos.

Se você realmente quer a cor em seu arquivo, você precisa decidir se deseja ver as seqüências de escape reais ou as cores interpretadas.

Por exemplo, o comando less será o padrão para imprimir as seqüências reais, mas você pode dizer para mostrar as cores com a opção -R :

   -R or --RAW-CONTROL-CHARS
          Like -r, but only ANSI "color" escape sequences are output in "raw" form.

Experimente less textfile vs. less -R textfile .

    
por 13.02.2014 / 11:08
1

Talvez você tenha algumas configurações incorretas no emacs, tente isto:

M-x ansi-color-for-comint-mode-on

Ou adicione esta linha ao seu .emacs :

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

Você pode ver este para obter mais detalhes.

    
por 13.02.2014 / 11:14