Como posso obter a saída de formatação bruta de comandos?

3

Gostaria de saber quais seqüências de controle são enviadas para bash por programas para formatar suas saídas.

Por exemplo, se eu despejo man less , posso discernir quais partes estão em negrito ou sublinhadas.

DDEESSCCRRIIPPTTIIOONN
       _L_e_s_s is a program similar to _m_o_r_e (1), but which allows backward  move-
       ment in the file as well as forward movement.

Mas se eu enviar a saída de ls -G para um arquivo, não há dados sobre o formato das cores.

Estou usando o Mac OS X.

    
por 1.61803 30.08.2015 / 16:22

5 respostas

4

Use script /tmp/output para começar a gravar em um novo shell, digite seus comandos e procure no arquivo /tmp/output , por exemplo, com um editor ou cat -vet . Digite exit no shell para sair da gravação.

    
por 30.08.2015 / 18:33
3

Provavelmente, melhor executar a saída por meio de um visualizador hexadecimal (por exemplo, od , hexdump , xxd ):

% man less | hexdump -C | head -5
00000000  4c 45 53 53 28 31 29 20  20 20 20 20 20 20 20 20  |LESS(1)         |
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00000040  20 20 20 20 20 20 20 4c  45 53 53 28 31 29 0a 0a  |       LESS(1)..|
00000050  0a 0a 4e 08 4e 41 08 41  4d 08 4d 45 08 45 0a 20  |..N.NA.AM.ME.E. |
% 

Como então você pode pesquisar qualquer caractere não imprimível em ascii(7) .

Quanto ao disparate "não funciona", uma rápida olhada nos resultados manuais ls(1) em:

% env TERM=xterm-color CLICOLOR_FORCE=1 ls -G | hexdump -C | head -3
00000000  1b 5b 33 34 6d 41 70 70  6c 69 63 61 74 69 6f 6e  |.[34mApplication|
00000010  73 1b 5b 6d 1b 5b 6d 0a  1b 5b 33 34 6d 44 65 73  |s.[m.[m..[34mDes|
00000020  6b 74 6f 70 1b 5b 6d 1b  5b 6d 0a 1b 5b 33 34 6d  |ktop.[m.[m..[34m|
% 
    
por 30.08.2015 / 17:04
3

Para você pode fazer

export CLICOLOR_FORCE=X
ls -G | cat -vet
    
por 30.08.2015 / 20:36
3

A maioria dos utilitários principais se comporta de maneira diferente quando eles emitem para um terminal interativo. Se eles detectarem que você está enviando para um arquivo ou um pipe, eles não serão formatados (razoavelmente: não queremos seqüências de escape de cores quando estamos processando listas de arquivos com um script). Para ls , você pode forçá-lo:

CLICOLOR_FORCE=1 ls -G

(Isso é para o OSX; no Linux, isso seria ls --color=always .)

Outras ferramentas têm switches semelhantes ( grep , por exemplo).

    
por 30.08.2015 / 16:41
0

Talvez seja simples:

 $ ls --color=always  |  od -cAn

será o suficiente.

    
por 31.08.2015 / 04:01