La idea es que mi aplicación sepa que no debe colorear la salida si el programa no puede imprimir, digamos, registrando la salida de un trabajo cron a un archivo, no es necesario registrar la salida en color, pero cuando se ejecuta manualmente, me gusta ver La salida de color.
Para este caso de uso, lo que suelen hacer los programas (por ejemplo, GNU ls o GNU grep con --color=auto
) es usar colores si su salida va a un terminal, y no hay colores de otro modo. Los terminales que no admiten secuencias de cambio de color ANSI son lo suficientemente raros como para que sea aceptable hacer que sus usuarios anulen la opción predeterminada. En cualquier caso, asegúrese de que su aplicación tenga la opción de activar o desactivar los colores.
En un script de shell, use [ -t 1 ]
para probar si la salida estándar es un terminal.
# option processing has set $color to yes, no or auto
if [ $color = auto ]; then
if [ -t 1 ]; then color=yes; else color=no; fi
fi
Desde un programa que usa la API C, llame isatty(1)
.
# option processing has set use_color to 0 for no, 1 for yes or 2 for auto
if (use_color == 2) use_color = isatty(1);