Cuando ejecuto un programa (por ejemplo grep
o ls
) sin un buscapersonas, su salida es de color. Sin embargo, cuando lo ejecuto canalizando su salida a less
, no se muestran colores.
Por ejemplo, este comando genera una salida en color:
grep -r something
pero esto no:
grep -r something | less
¿Por qué? ¿Cómo puedo ver los colores less
?
command-line
less
Mohammad Reza Rezwani
fuente
fuente
grep --color=always "search string" * | less -R
pero tiendo a usarmost
hoy en día en lugar deless
. TAMBIÉN: gnu.org/software/src-highlite es un marcador de color (menos funciona también)python-pygments
?Respuestas:
Hay dos problemas aquí:
ls
—que detectan automáticamente el soporte de color— no encuentran soporte de tuberíasless
está configurado para mostrar solo los códigos de color de forma predeterminada.Ambos se pueden superar, pero es un poco torpe:
Esto no es
ls
específico. Muchos comandos que admiten color también tienen un argumento de anulación.Una respuesta un poco más profunda
ls
es comprobar si su STDOUT pertenece o no a un terminal real o no. Cuando se canalizan las cosas, el STDOUT se establece en el STDIN del siguiente comando.Puede ver esto en el trabajo en el
ls
código fuente . Está utilizando elisatty
comando (una interfaz POSIX central) para determinar cuál es la situación:Los colores están activados por defecto:
¿Intentamos generar en varias columnas:
grep
hace algo muy similar, a menos que se anule explícitamente, detectará el soporte de color, conisatty
:fuente
--color
argumento:ack-grep -i select --color | less -R
-C
argumento.Si está interesado en los colores en
less
general, es posible que desee mirarlesspipe.sh
. Ver, por ejemplo, http://freecode.com/projects/lesspipe .También coloreará los scripts de shell, scripts de Perl, etc. de manera similar a un editor de texto, pero sin el uso de ningún programa de "preprocesamiento" para colorear.
fuente