Nenhuma saída colorida em menos para o comando ls

20

Se eu executar ls , recebo uma saída colorida que considero bastante útil para obter rapidamente uma olhada no tipo de arquivo. Quando tento canalizá-lo para less mesmo com os sinalizadores -r e -R , a coloração sempre se perde. Eu estou usando zsh versão 5.0.7. Alguma ideia? Obrigado.

edit: Eu estou no OS X.

    
por nunos 18.02.2015 / 17:56

3 respostas

19

Isso ocorre por design: programas que produzem saída colorida normalmente o fazem somente quando a saída vai para um terminal, não quando é enviada para um canal ou para um arquivo normal. A razão é que os dados enviados em um terminal são presumivelmente lidos por um ser humano, enquanto dados direcionados a um programa ou gravados em um arquivo provavelmente são analisados por algum programa, portanto ele não deve conter conteúdo estranho como sequências de escape que mudam de cor .

GNU ls exibe a saída colorida em um terminal quando você passa a opção --color (ou --color=auto ). Para forçar a saída colorida, independentemente do tipo de arquivo da saída padrão, passe --color=always ou --color=yes (eles são sinônimos). Esta convenção foi seguida por outros comandos, como o GNU grep, o FreeBSD grep, git diff , etc.

ls --colors=yes -l | less

Com a versão FreeBSD de ls (também encontrada no OSX, e disponível como colorls port no OpenBSD e NetBSD), passe a opção -G para exibir as cores quando a saída for um terminal. Defina o ambiente CLICOLOR_FORCE para exibir as cores, independentemente do tipo de arquivo de saída.

CLICOLOR_FORCE=1 ls -l | less
    
por 19.02.2015 / 01:02
17

O problema é que o programa ls definiu a opção --color=auto , que basicamente significa que a saída deve ser colorida somente se estiver conectada ao terminal, caso contrário (saída conectada a um tubo ou arquivo) não há cores emitido.

Se você deseja ter cores nesses casos, você deve definir a opção --color como always , então tente

ls --color=always | less -R

Se esse comportamento é o que você espera o tempo todo, basta criar um alias:

alias ls='ls --color=always'
    
por 18.02.2015 / 18:32
0

Eu não posso comentar a resposta do @jimmij, porque eu tenho menos de 50 representantes, mas eu gostaria de explicar o que funcionou para mim no bash.

Se você correr

man ls | grep color

você verá todas as entradas da man -page para seu ambiente de shell específico (no nosso caso, bash ).

Para mim, o seguinte ajuste foi o truque:

alias ls='ls -G'
    
por 18.02.2015 / 22:52