Quando executo um programa (por exemplo grep
ou ls
) sem um pager, sua saída é colorida. No entanto, quando eu o executo, direcionando sua saída para less
, nenhuma cor é mostrada.
Por exemplo, este comando gera uma saída colorida:
grep -r something
mas isso não acontece:
grep -r something | less
Por quê? Como posso ver as cores less
?
command-line
less
Mohammad Reza Rezwani
fonte
fonte
grep --color=always "search string" * | less -R
mas eu costumo usarmost
hoje em vez deless
. TAMBÉM: gnu.org/software/src-highlite é um marcador de cor (menos obras também)python-pygments
?Respostas:
Existem dois problemas aqui:
ls
- que detectam automaticamente o suporte de cores - não encontram suporte de pipesless
está definido para exibir apenas códigos de cores por padrão.Ambos podem ser superados, mas é um pouco desajeitado:
Isto não é
ls
específico. Muitos comandos que suportam cores também têm um argumento de substituição.Uma resposta um pouco mais profunda
ls
é verificar se o STDOUT pertence ou não a um terminal real. Quando você canaliza as coisas, o STDOUT é definido como o STDIN do próximo comando.Você pode ver isso funcionando no
ls
código fonte . Está usando oisatty
comando (uma interface principal do POSIX) para descobrir qual é a situação:As cores estão ativadas por padrão:
Tentamos produzir em várias colunas:
grep
faz uma coisa muito semelhante, a menos que seja explicitamente substituído, ele detectará o suporte de cores, comisatty
:fonte
--color
argumento:ack-grep -i select --color | less -R
-C
argumento.Se você estiver interessado em cores de uma maneira
less
mais geral, talvez queira dar uma olhadalesspipe.sh
. Veja, por exemplo, http://freecode.com/projects/lesspipe .Ele também colorirá scripts de shell, scripts perl, etc. de maneira semelhante a um editor de texto, mas sem o uso de qualquer programa de "pré-processamento" para fazer a coloração.
fonte