Piping a saída de ls ou tree para menos perde cores?

11

tree e ls podem tipos de arquivos distintos, colorindo nomes de arquivos de maneira diferente.

tree e ls geralmente produzem uma longa lista de arquivos (incluindo diretórios), então canalizo a saída stdout para less .

Mas less não preserva as cores. Como podemos mostrar cores ou algumas formas alternativas?

Acabou de ver a lista encadeada, mas o encadeamento para less -R ou less -r não funciona. Meu sistema operacional é o Ubuntu 12.04. less é a versão 444: 09 de junho de 2011.

    
por Tim 29.07.2014 / 15:33

1 resposta

14

Suponho que você esteja usando ls --color=auto , que diz ls para usar cores no modo 'automático'. O modo 'Automático' informa less para ver se o STDOUT é um terminal e, em caso afirmativo, use cores, caso contrário, não use cores. Quando você canaliza ls para less , STDOUT não é um terminal, está conectado a STDIN de less , que é um canal normal.

A solução usa ls --color ou ls --color=always .

No entanto, agora isso leva a outro problema em potencial. Dependendo do seu less , ele pode não mostrar a cor, mas exibir os códigos de escape. A solução é usar less -R . Isso informa less para passar os códigos de escape para escapes de cor ANSI. Você não quer usar -r , pois isso causará problemas com linhas longas que se enrolam, pois menos não calcula corretamente o comprimento da linha.

Solução tão completa:

ls --color | less -R

Similarmente para tree :

tree -C | less -R
    
por 29.07.2014 / 17:07

Tags