GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo verificar si Bash puede imprimir colores?

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 .


Linux
  1. Cómo comprobar si la cadena contiene una subcadena en Bash

  2. ¿Cómo verificar syslog en Bash en Linux?

  3. ¿Cómo puedo eliminar el puerto TCP 16969 en Bash?

  4. ¿Cómo verificar si un archivo está vacío en Bash?

  5. ¿Cómo puedo probar mi script Bash en versiones anteriores de Bash?

Cómo verificar si existe un archivo o directorio en Bash

Bash printf - Cómo imprimir una variable en Bash

Cómo verificar si existe un archivo o directorio en Bash

Cómo verificar si una cadena contiene una subcadena en Bash

Cómo verificar si existe un archivo o directorio en Bash Shell

¿Cómo verifico la sintaxis de un script Bash sin ejecutarlo?