Como colorear la línea de comandos en Bash

Si bien, como te he comentado en distintas ocasiones, mi framework de trabajo para relacionarme con el terminal es Bash it, esto no quita a que en ocasiones lo utilice a pelo. Y con esto de utilizarlo a pelo, me refiero a configurarlo y personalizarlo para sacarle el máximo partido posible. Así, se trata de tener una línea de comandos que te de la mayor información posible. Y no solo que te de la mayor información posible, sino que además esa línea de comandos sea actractiva, y que la información te la ofrezca de la forma mas clara posible. Así, en este artículo encontrarás diferentes opciones para personalizar y colorear la línea de comandos en Bash.

Como digo, no solo se trata solo de personalizar la línea de comandos para que sea mas atractiva, con sorprendentes colores y efectos. El objetivo principal, es que la línea de comandos te de la mayor información posible.

Colorear la línea de comandos

Personalizar y colorear la línea de comandos

Para personalizar la línea de comandos tienes diferentes variables, de PS1 a PS4, cada una de ellas con diferentes misiones. En este artículo, me quiero centrar en PS1, dado que es la parte de la línea de comandos que utilizamos con mas frecuencia. Con mucha mas frecuencia que las otras variables, que las utilizamos en pocas ocasiones.

PS1

PS1 es lo que verás por defecto cada vez que te enfrentes al terminal. Normalmente te muestra el nombre de usuario, el hostname y el directorio de trabajo. Aunque, como te indico en la introducción, lo puedes personalizar a tu antojo o de acuerdo a tus necesidades, para que de esta forma cumpla con tus expectativas.

Si quieres ver cual es la definición de tu PS1, tan solo ejecuta echo $PS1. Por defecto en muchas distribuciones viene definido como \u@\h:\w\$. Esto no es mas que tu usuario \u, tu hostname \h y el directorio en el que te encuentras \w. Existen otros parámetros para definirlo. Así,

  • \a El caracter ASCII correspondiente a la campana
  • \d La fecha en formado “Lun Mar 11”
  • \e El carácter ASCII correspondiente al escape
  • \h La primera parte del hostname
  • \H El FQDN o hostname completo
  • \j El número de procesos suspendidos
  • \l El nombre del shell, por ejemplo ttyp1
  • \n Nueva línea
  • \r Retorno de carro
  • \s Nombre del ejecutable shell, en tu caso Bash
  • \t La hora en formato de 24 horas
  • \T Este es la hora en formato de 12 horas
  • \@ La hora en formato AM/PM
  • \u Tu nombre de usuario
  • \v La versión de Bash
  • \V La versión de Bash incluyendo el patchlevel
  • \w El directorio actual
  • \W La parte final del directorio actual
  • \! La posición del comando actual en la historia
  • \# El número de instrucción ejectuado
  • \$ Si eres root mostrará # en otro caso, mostrará $
  • \xxx inserta un caracter ASCII definido por los tres dígitos
  • \\ inserta una barra invertida
  • \[ aparece para definir una secuencia de caracteres que no mueve el cursor, como pueden ser una definición de colores. Esto es lo que vas a utilizar ahora para darle color a tu terminal.
  • \] Esta secuencia es la que define la finalización de la secuencia de caracteres que empezaste en el punto anterior.

Dando color

Para darle color al prompt, la estructura es la siguiente,

\e[x;y;zm $PS1 \e[m
  • Con \e[ comienzas la secuencia
  • x;y;zm definen el formato, color de texto y color de fondo.
  • \e[m define el final de la secuencia. Es importante que definas el final de la secuencia porque de otra manera, el texto, a continuación del prompt aparecerá en el último color que hayas definido.

Así, la definición de colores se corresponde con la siguiente tabla,

TextoColor textoColor fondo
0 – normal30 – Negro40 – Negro
1 – negrita31 – Rojo41 – Rojo
4 – subrayado32 – Verde42 – Verde
33 – Amarillo43 – Amarillo
34 – Azul44 – Azul
35 – Púrpura45 – Púrpura
36 – Turquesa46 – Turquesa
37 – Blanco47 – Blanco

Ahora ya es cuestión que pruebes todas las combinaciones que tu consideres, para personalizar y colorear la línea de comandos. Una observación, cada vez que comienzas una secuencia, utilizando \e[, sobrescribes el formato anterior. Y cuando terminas con \e[m, simplemente vuelves al estado por defecto. En mi caso, ese estado por defecto es texto en blanco y fondo negro. Y el formato de texto es normal.

Así, por ejemplo esta secuencia,

PS1='\e[0;31;43m\u\e[m@\e[0;37;45m\h\e[m:\e[0;31;47m\W\e[m\$ '
  • el primer tramo antes de @ será texto rojo y fondo amarillo
  • el segundo tramo donde indica el hostname será texto blanco y fondo púrpura
  • el tercer tramod donde está el directorio será texto rojo y fondo blanco

Ya te digo que esto puede ser tan entretenido como tu quieras. Pero sobre todo, es interesante que le saques provecho para hacer un propmpt totalmente productivo.

PS2

Cuando quieres escribir un comando muy largo, y utilizas \ para pasar a la siguiente línea de comando, el símbolo > que aparece se corresponde con PS2. Por ejemplo,

$ sudo apt update && \
> sudo apt upgrade

Si quieres ver cual es PS2, al igual que cualquier otro, tan solo tienes que hacer un echo. echo $PS2.

PS3

Este se utiliza para el operador select dentro de un script en bash. Es dificil encontrarlo directamente en la consola, a menos que efectivamente estés respondiendo a un select de un script. Puedes ver PS3 en funcionamiento con este sencillo script, con el que te puedes pasar toda una tarde entretenido,

#/bin/bash
echo "elije, piedra, papel o tijera"
select i in piedra papel tijera exit
do
    case $i in
       piedra)
            echo "Yo ..."
            sleep 1
            echo "papel. Gano!!!!. Papel envuelve piedra."
            ;;
       papel)
            echo "Yo ..."
            sleep 1
            echo "tijera. Gano!!!!. Tijera corta papel."
            ;;
       tijera)
            echo "Yo ..."
            sleep 1
            echo "piedra. Gano!!!!. Piedra machaca tijera."
            ;;
       exit)
            echo "Siempre gano yo, ja, ja, ja!!!!"
            exit
            ;;
    esac
done

Al ejecutarlo verás que aparece por el valor por defecto de PS3, #?. Por supuesto, que este valor lo puedes modificar al igual que puedes hacer con cualquiera de los anteriores. Así puedes definir,

export PS3="elige una opcion: "

PS4

Este es el que se utiliza en el modo de depuración. Por tanto, es el que te mostrará cada una de las líneas que se ejecutan cuando estás en modo de depuración.

Si no tienes claro como utilizar el modo de depuración. Así te recomiendo el capítulo sobre Depurar en Bash, del tutorial sobre scripts en Bash.


Más información,

Imagen de portada derussn_fckr en Unsplash

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *