Mi Prompt de Bash


Para celebrar el lanzamiento de Bash 4.4 se me ha ocurrido que podría ser interesante compartir con todos la configuración de mi prompt. 

La configuración por defecto del prompt de Bash tiene un defecto importante, a mi modo de ver. Es demasiado larga para un terminal de 80x24, dimensiones que yo siempre intento respetar. Mi configuración personal pretende ser más breve pero a la vez conservando la misma funcionalidad e incluso añadiendo alguna característica extra.


redprompt() {
    if [[ $? != 0 ]]; then
        echo -e '\e[0;49;31m'
    fi
}

if [[ $SSH_TTY ]]; then
    PS1='@\h:\W$(redprompt)\$\e[0m '
else
    PS1='\W$(redprompt)\$\e[0m ' 
fi

La función redprompt() lee la salida del anterior comando. Si encuentra algún error en su ejecución, colorea de rojo el símbolo del dólar para resaltar esa situación errónea.

Luego se aprecia una evaluación de la variable del sistema $SSH_TTY que indica si la conexión con el terminal se está efectuando de forma local o remota. En el primer caso no hace nada y muestra el prompt que hemos definido por defecto ~$ pero si se produce una conexión de forma remota, se añade al principio del prompt el nombre del host para poder diferenciar en una sesión de SSH las distintas conexiones remotas.

Un cambio muy sencillo que acorta la longitud del prompt es la utilización del parámetro \W en lugar de \w ya que solo muestra la carpeta en la que se desarrolla la ejecución del programa, no toda la ruta como hace Bash por defecto. 

Mi configuración simplifica bastante el prompt de Bash pero tiene ciertos problemas de portabilidad ya que los distintos sistemas y emuladores de terminales tienden a utilizar secuencias de escape para cambiar los colores y otros efectos, que no son compatibles entre sí, por lo que no puedo asegurar que esta configuración le funcione a todo el mundo. Por último, quiero recordar que cada usuario tiene su propia configuración de prompt por lo que si cambiamos a modo root, esta será sobrescrita por la configuración que el sistema tenga asignada al superusuario, así que habrá que copiarla también a /root/.bashrc