Da color a tus scripts en Bash

AdriMcGrady 29/08/2021

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:

Ejemplo de colores en Bash

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:

Ejemplo de colores en Bash


Artículo anterior Artículo siguiente

Artículos relacionados: