Quiero saber si hay alguna forma de verificar si mi programa puede generar una salida de terminal usando colores o no.
Ejecutar comandos como less
y mirando la salida de un programa que emite usando colores, la salida se muestra incorrectamente, como
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Gracias
Respuesta aceptada:
La idea es que mi aplicación sepa que no debe colorear la salida si el programa no puede imprimir, por ejemplo, registrar la salida a través de un trabajo cron en un archivo, no es necesario registrar la salida en color, pero cuando se ejecuta manualmente, me gusta ver la salida coloreada
¿En qué idioma está escribiendo su solicitud?
El enfoque normal es comprobar si el dispositivo de salida es un tty y, si lo es, comprobar si ese tipo de terminal admite colores.
En bash
, eso se vería como
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
echo "${red}error${normal}"
echo "${green}success${normal}"
echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.
En C, tiene que escribir mucho más, pero puede lograr el mismo resultado usando isatty y las funciones enumeradas en man 3 terminfo
.