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
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
Respuesta4
Es mejor usar tput
el 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 grep
salida, 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 tput
es 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.