Skip to content

CÓMO personalizar el Bash

Navegando por los foros de Ubuntu encuentro un HOWTO para editar los colores usados en la pantalla del Terminal.

No obstante, me pareció algo complicado, así que mirando los enlaces que daban encontré un mensaje en otro foro en inglés, mucho más claro. E incluso mirando en Google vi otro documento algo más pro sobre el tema. Así que intentaré hacer un recopilatorio en español, para referencia propia (y ajena, si le resulta útil a alguien).

El archivo que nos interesa es .bashrc, situado en nuestro /home/comotellames. Hacemos primero una copia por si acaso:

$ cp .bashrc .bashrc-backup

Ahora edítalo con tu procesador de texto favorito. Si usas Ubuntu o alguna otra distro basada en GNOME, probablemente tengas que teclear

$ gedit .bashrc

Buscamos la línea que empieza por PS1 y le ponemos un # delante para comentarla (para quitar la configuración por defecto). Ahora añadimos la nuestra propia, al gusto, en una línea debajo.

Para obtener algo sencillo, escribimos:

PS1='[\u:\h \w] \$ '

(¡Ojo, son comillas simples!). Siendo \u el nombre de usuario, \h el nombre de la máquina, \w el directorio actual y \$ la señal de consola. Esta línea mostaría en la consola algo así:

[jorge:Helios ~] $

Hay muchas más opciones que podemos añadir, os dejo las más interesantes:

  • \d la fecha en formato “día de la semana, mes y número” (Lun Feb 28)
  • \h el host, hasta el primer ‘.’
  • \H nombre completo del host
  • \n nueva línea
  • \t la hora en formato 24h
  • \T la hora en formato 12h (HH:MM:SS)
  • \@ la hora en formato 12h, (am/pm)
  • \u el nombre de usuario actual
  • \v la versión del bash (2.00)
  • \V la versión del bash, completa (2.00.0)
  • \w la ruta del directorio de trabajo actual
  • \W el nombre del directorio de trabajo actual
  • \! el número de comando, en el historial
  • \# el número de comando, en esta sesión
  • \$ si eres superusuario, será un #, si no, un $
  • \nnn> el carácter correspondiente al número octal nnn
  • \\ barra invertida

Ahora vamos a toquetear otras opciones interesantes, como el título de la ventana o los colores. Todo eso son sentencias de control, que no han de ser impresas, por lo que hemos de escribirlas encerradas entre \[ y \]. Obviamente, podéis aplicar ambas a la vez.

Título de la ventana

\e]2;TITULO\a

  • \e]2 indica que aquí empieza la configuración del título de la ventana
  • TITULO es eso mismo
  • \a indica que aquí termina la configuración del título de la ventana

Un ejemplo tonto de esto sería:

PS1='\[\e]2;Trasteando en \h\a][\u:\h \w] \$ '

Que en mi caso muestra en el título Trasteando en Helios. Ahora, si nos vamos al alto nivel, quizá te has parado a pensar que eso no te vale de mucho cuando no te funciona la interfaz gráfica, y te gustaría tener dos versiones: una para usar cuando estás en una ventana (aprovechándote de la posibilidad de usar el título de ésta) y otra cuando no. Se puede hacer así:

if [ "$TERM" = "linux" ]
then
  # Sin interfaz grafica
  PS1='[\u:\h \w] \$ '
else
  # Con interfaz grafica (nos servimos del titulo de la ventana)
  PS1='\[\e]2;\u:\h \w\a \$ ' 
fi

Usando colores

\e[NEGRITA;TEXTO;FONDOm

  • \e[ indica que aquí empieza la configuración de los colores
  • NEGRITA es bastante explícito, podemos ponerla (1) o dejarla quitada (0) – activarla restará brillo al color de la fuente
  • TEXTO especifica el color del texto
  • FONDO especifica el color del texto
  • Los colores para el texto y el fondo son los mismos, es cuestión de colocarles un 3 delante a los primeros y un 4 a los segundos. Es decir, los colores para el texto están en las treintenas y los del fondo en las cuarentenas:
    • 0. Negro/gris oscuro
    • 1. Rojo
    • 2. Verde
    • 3. Amarillo
    • 4. Azul
    • 5. Magenta
    • 6. Fucsia
    • 7. Blanco/gris claro
    • 8. Color por defecto (el que figura en las preferencias del perfil actual de la consola)
  • m indica que aquí termina la configuración de los colores

No es necesario incluir todas las opciones, podemos saltarlas las que nos den igual y se tomará el valor por defecto. Entonces, si queremos poner la consola a lo Matrix, ponemos:

PS1='[\e[32;40m\][\u:\h \w] \$ '

Hemos añadido el trozo al principio, con lo que todo el texto saldrá en verde. Si queremos que el prompt salga en verde, pero lo que tecleamos nosotros salga en blanco, por ejemplo, no hay más que añadir otro trozo al final para que quede así:

PS1='\[\e[32;40m\][\u:\h \w] \$ \[\e[37m\]'

Como el fondo ya lo teníamos puesto en negro, no es necesario repetirlo.

Ahora vamos a explorar otra posibilidad, que es la de cambiar el color de un trozo cuando el comando anterior devolvió error. Personalmente esto me parece lo más útil de todo.

Lo que hay que hacer aplicar el método normal pero sustituir el código de color del texto por $(($??ERROR:OK)), poniendo en ERROR y OK los códigos de color cuando el último comando devolvió error o no, respectivamente. Por ejemplo, para que cuando haya un error, el $ de nuestro terminal matrix se ponga rojo, tecleamos:

PS1='\[\e[32;40m\][\u:\h \w] \[\e[$(($??31:32))m\]\$ '

Y esto es todo. Si eres de los que usan bucles y tal en el Bash, puedes cambiar el prompt secundario mediante la variable PS2, del mismo modo. Espero que os haya gustado y os animéis a ponerlo en práctica. Si os lo cargáis y no sabéis arreglarlo, basta con teclear:

$ mv .bashrc-backup .bashrc

Al reiniciar la consola todo estará como al principio.