Da color a tus scripts en bash
Aunque pueda parecer algo sin importancia y solo un adorno, a veces, viene muy bien poder dar color la salida de tus scripts en bash. De hecho, pienso que si no se hace más es porque no todo el mundo sabe lo sencillo que es. Y ciertamente, para scripts donde la salida no es de muchas líneas no tiene demasiado sentido, pero hay montones de ocasiones donde esperamos un salida de bastantes lineas y marcar por colores las ocurrencias más interesantes es algo muy útil.
El uso de colores en bash es tan sencillo como añadir unos códigos de secuencias de escape antes de la salida que se quiera mostrar por la salida estándar. Eso sí, después no se puede olvidar dejar el formato como estaba antes. Así que lo mejor es empezar por el principio.
Secuencias de formato
Los secuencias de formato serán del tipo <Esc>[
Codigo de Formatom
Secuencias de escape
La secuencia de escape puede expresarse de alguna de las siguientes formas:
\e
\033
\x1B
En realidad, no importa cual de estas secuencias usemos para \<Esc>. Personalmente suelo usar \033
o \e
, pero puedes usar la que prefieras.
Código de Formato
Aquí esta la gracia del asunto: el código de formato. Puede ser un código de color y pueden definir colores tanto para la fuente como para el fondo. O un código de estilo de la fuente. Y como puedes imaginarte estos códigos pueden usarse conjuntamente separando cada uno de ellos por ;
.
Códigos de estilo
Aquí algunos ejemplos de códigos de formato solo con estilos:
- Negrita:
\e[1m
- Subrayado:
\e[4m
- Parpadeo:
\e[5m
Códigos de color de fuente
Y aquí más ejemplos de códigos de estilo solo para el color de la fuente:
- Color por defecto:
\e[39m
- Rojo:
\e[31m
- Verde:
\e[32m
- Amarillo:
\e[33m
- Azul:
\e[34m
Códigos de color de fondo
Y códigos de color de fondo:
- Rojo:
\e[41m
- Verde:
\e[42m
- Amarillo:
\e[43m
- Azul:
\e[44m
Códigos combinados
- Negrita + Texto amarillo + Fondo azul:
\e[1;33;44m
- Texto rojo + Fondo azul:
\e;31;44m
Códigos de reset
Existen códigos específicos para hacer un reset del formato del texto. Hay que usarlos para dejar el formato como estaba. El formato no se restablece al terminar el comando, tenemos que hacerlo manualmente.
- Reset de todo el formato:
\e[0m
- Reset de negrita:
\e[21
- Reset del color de fuente:
\e[39m
- Reset del color de fondo:
\e[49m
Se pueden combinar los códigos de color y existen muchos más códigos de formato de cualquiera de los anteriores tipos. Como ejemplo os dejo este enlace donde podéis consultar muchos más.
Uso de los códigos de formato
Los códigos de formato puedes usarlos con “echo -e” o “printf”. Aquí te dejo unos ejemplos:
echo -e "\e[;31mError: Revisa esto\e[0m"
echo -e "\e[4;30;43mSoy la Abeja Maya\e[0m"
printf "\e[;31mError: Revisa esto\e[0m\n"
Y este es el resultado:
Por último, para usar estos códigos de manera más cómoda en tus scripts puedes definir variables al comienzo de los mismos con los formatos ya preestablecidos. A continuación tienes un pequeño script que en función de si el número de segundos de la hora actual es par o no muestra el texto en un formato u otro.
#!/bin/bash
ROJO="\e[;31m"
CELESTE="\e[;36m"
NOCOLOR="\e[0m"
SEGUNDOS=""
for i in {1..5}; do
SEGUNDOS=$(date +%S)
if (( $SEGUNDOS % 2 )); then
echo -e "${CELESTE}$SEGUNDOS es número PAR"
else
echo -e "${ROJO}$SEGUNDOS es número IMPAR"
fi
sleep 3
done
En la siguiente imagen se puede ver la salida de la ejecución del script anterior:
Artículo anterior Artículo siguiente