Quiero saber si hay alguna forma de verificar si mi programa puede generar salida de terminal usando colores o no.
Ejecutando comandos como lessy mirando la salida de un programa que sale usando colores, la salida se muestra mal, como
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Gracias

Respuestas:
¿En qué idioma escribe su solicitud?
El enfoque normal es verificar si el dispositivo de salida es un tty, y si es así, verificar si ese tipo de terminal admite colores.
En
bash, eso se vería comoEn C, debe escribir mucho más, pero puede lograr el mismo resultado utilizando isatty y las funciones enumeradas en
man 3 terminfo.fuente
Esto debería ser suficiente:
colores de tput explicados:
Si miras la página de manual, notarás esto:
Y...
El termcap
colorsestá en la base de datos terminfo, por lo que puede solicitarlo. Si tiene un estado de salida cero, entonces se compila el termcap. Pero si tiene algo como:Esto muestra que unknowntermcap no existe. Así que esto:
Muestra que tu comando era correcto.
Otras formas útiles:
Salud
fuente
colorsno está documentado en latputpágina del manual (!), entonces ¿debería buscar un número> = 8 en stdout o un código de retorno de 0?colorscapacidad está documentada en terminfo (5) . Las pruebas utilizandotput -T dumb colors,tput -T vt220 colors,tput -T linux colors,tput -T xterm colorssugiere valores comunes son-1(sin soporte de color) y8(8 colores). Tenga en cuenta que esto solo se aplica después de comprobar que el dispositivo de salida es un terminal (p . Ej.[ -t 1 ]Oisatty).tput colorsdevuelve lo que la base de datos del terminal local piensa del terminal. Esto puede corresponder o no a lo que el terminal realmente puede hacer, especialmente para un tipo de terminal como elxtermque viene en muchas variantes (que van desde el blanco y negro hasta los 256 colores).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.Desde un programa que usa la API C, llame
isatty(1).fuente
Intenta usarlo
less --RAW-CONTROL-CHARS.En este ejemplo estoy usando logtool , que imprime la salida usando colores.
Sin --RAW-CONTROL-CHARS:
Con --RAW-CONTROL-CHAR (Imagine que esto está en bonitos colores. Además, no estoy seguro de por qué
^Gse está mostrando eso ):fuente
Eso sería culpa de
lessno estar configurado para interpretar escapes de ANSI; buscarRen$LESSOPTS. En cuanto a determinar si el sistema sabe que su terminal puede manejar colores,tput colorsgenerará la cantidad de colores que admite o-1si no admite colores. (Tenga en cuenta que algunos terminales pueden usar enxtermlugar dexterm-colorcomo su descripción de terminal, pero aún admiten colores).fuente
Si desea agregar color a la salida, pero solo cuando los colores son compatibles, simplemente puede usar
tput. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.htmlfuente