¿Nombres de colores de terminal "amigables" en scripts de shell?

¿Nombres de colores de terminal "amigables" en scripts de shell?

Conozco bibliotecas en lenguajes como Ruby y Javascript para facilitar la coloración de los scripts de su terminal mediante el uso de nombres de colores como "rojo".

¿Pero hay algo como esto para los scripts de shell en Bash, Ksh o lo que sea?

Respuesta1

Puedes definir colores en tus scripts bash de esta manera:

red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'

Y luego úselos para imprimir en los colores que necesite:

printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."

Respuesta2

Puedes usar tput Oprintf

Usando tput,

simplemente cree la función como se muestra a continuación y úsela

shw_grey () {
    echo $(tput bold)$(tput setaf 0) $@ $(tput sgr 0)
}

shw_norm () {
    echo $(tput bold)$(tput setaf 9) $@ $(tput sgr 0)
}

shw_info () {
    echo $(tput bold)$(tput setaf 4) $@ $(tput sgr 0)
}

shw_warn () {
    echo $(tput bold)$(tput setaf 2) $@ $(tput sgr 0)
}
shw_err ()  {
    echo $(tput bold)$(tput setaf 1) $@ $(tput sgr 0)
}

puedes llamar a la función anterior usandoshw_err "WARNING:: Error bla bla"

Usandoprintf

print red; echo -e "\e[31mfoo\e[m"

Respuesta3

en zsh:

autoload -U colors
colors

echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?

Respuesta4

Es mejor usar tputel cual manejará los caracteres de escape dependiendo de las capacidades de salida/terminal. (Si un terminal no puede interpretar \e[*códigos de color, entonces estará "contaminado", lo que hace que la salida sea más difícil de leer. (O, a veces, si utiliza dicha grepsalida, la verá \e[*en los resultados)

Mira estotutorial paratput.

Puedes escribir :

blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;

Aquí hay un tutorialpara imprimir un Reloj de color en el terminal.

Además, tenga en cuenta que tputes posible que aún se imprima un carácter de escape al redirigir STDOUT a un archivo:

$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"

Para evitar que esto suceda, configure sutput variables como se propone enesta solución.

información relacionada