Cuando ejecuto un comando desde una terminal que imprime una salida en color (como ls
o gcc
), se imprime la salida en color. Según tengo entendido, el proceso en realidad genera códigos de escape ANSI y el terminal formatea el color.
Sin embargo, si ejecuto el mismo comando mediante otro proceso (por ejemplo, una aplicación C personalizada) y redirijo la salida a la propia salida de la aplicación, estos colores no persisten.
¿Cómo decide un programa si generar o no texto con formato de color? ¿Hay alguna variable de entorno?
Respuesta aceptada:
La mayoría de estos programas solo envían códigos de color a un terminal de forma predeterminada; verifican si su salida es un TTY, usando isatty(3)
. Por lo general, hay opciones para anular este comportamiento:deshabilitar colores en todos los casos o habilitar colores en todos los casos. Para GNU grep
por ejemplo, --color=never
deshabilita los colores y --color=always
los habilita.
En un shell, puede realizar la misma prueba usando -t
test
operador:[ -t 1 ]
solo tendrá éxito si la salida estándar es un terminal.