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