Hacer más colorida la terminal

Durante la década de 1980, los ordenadores estaban aún en incipiente desarrollo y quienes trabajábamos con ellos nos encontrábamos con limitaciones que debíamos superar con grandes dosis de imaginación.

Un poco de historia.

Una de las limitaciones más frecuente, era el que las terminales de los ordenadores e incluso las pantallas de los ordenadores personales, eran monocromáticas, por lo que hacer que ciertos textos o ciertas partes de la pantalla resaltasen, no era tan sencillo como aplicar un color distinto. En muchos casos, los desarrolladores usábamos un conjunto de instrucciones que, aunque ya existía en los años 70, no era ampliamente conocido y, que nos permitía cambiar el tamaño de las letras, posicionar el cursor de forma arbitraria, escribir con los caracteres invertidos o subrayar párrafos enteros, por citar algunos ejemplos.

En la década de 1990, aparecieron los primeros terminales en color, lo que nos facilitaba la vida, pero aún había que trabajar con texto, los terminales gráficos y el software funcionando en modo gráfico, no aparecieron hasta finales de la década.

El conjunto de instrucciones que nos permitía jugar con la presentación de los textos, se llama “Código escape ANSI” y digo que se llama, porque aún es válido y se utiliza en muchos casos.

Uno de esos casos, es el que nos ocupa; el uso del código de escape, nos permite cambiar el color del texto que nos ofrece la terminal o consola en nuestra distribución Linux o Unix.

Lo que podemos hacer.

En las distribuciones Linux, la terminal o consola está guiada por una variable de entorno que le indica el qué y el cómo al presentar el “prompt”. La variable en cuestión es PS1. Si abrimos una consola (usualmente, pulsando Ctrl+Alt+T) podemos ver el estado actual de la variable, algo parecido a:

xxxx@xxxx:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00;33m\]\$
xxxx@xxxx:~$

Alterando el contenido de PS1, alteramos la presentación y, entre otras cosas, podemos alterar el color de los distintos segmentos que componen el “prompt”. La forma de presentar cambios en el color, es cambiando el color del texto que se va a presentar y, ese color, estará determinado por la secuencia de escape de acuerdo al código escape ANSI. Si bien el código exacto es una variación del estándar ANSI, los colores son los mismos, de acuerdo con la siguiente tabla:

Tabla de colores
Intensidad 0 1 2 3 4 5 6 7
Normal Negro Rojo Verde Amarillo Azul Magenta Cian Blanco
Claro Negro Rojo Verde Amarillo Azul Magenta Cian Blanco

Dando forma a la variable.

Además del color del texto, la variable PS1 está compuesta por diferentes secciones y, de acuerdo con el manual de Bash (que es el más común de los shell o intérprete de comandos) PS1 está compuesta por las secciones delimitadas por los caracteres especiales:


\a Un carácter campana.
\d La fecha, en formato "Día de la semana Mes Día del mes" (por ejemplo "Tue May
26").
\D{formato}
Página 96Capítulo 6: Características de Bash
El formato se pasa a strftime(3) y el resultado se inserta en la cadena del prompt; un
formato vacío resulta en una representación de tiempo específica de la localización.
Las llaves son obligatorias.
\e Un carácter de escape.
\h El nombre de anfitrión (host), hasta el primer '.'.
\H El nombre de anfitrión.
\j El número de tareas manejadas actualmente por la shell.
\l El nombre base de del dispositivo terminal de la shell.
\n Una nueva línea.
\r Un retorno del carro.
\s El nombre de la shell, el nombre base de $0 (la parte que sigue a la última barra
inclinada).
\t La hora, en formato de 24 horas HH:MM:SS .
\T La hora, en formato de 12 horas HH:MM:SS .
\@ La hora, en formato de 12 horas am/pm.
\A La hora, en formato de 24 horas HH:MM .
\u El nombre de usuario del usuario actual.
\v La versión de Bash (por ejemplo, 2.00)
\V La distribución de Bash, la versión + el nivel de parcheo (por ejemplo 2.00.0).
\w El directorio de trabajo actual, con $HOME abreviado con una tilde (utiliza la variable
$PROMPT_DIRTIRM ).
\W El nombre base de $PWD , con $HOME abreviado con una tilde.
\! El número de historia de este comando.
\# El número de comando de este comando.
\$ Si el uid efectivo es 0, # , en caso contrario $ .
\nnn El carácter cuyo código ASCII coincide con el valor octal nnn.
\\ Una barra invertida.
\[ Comienza una secuencia de caracteres no imprimibles. Esto puede usarse para introducir una secuencia de control del terminal dentro del prompt.
\] Finaliza una secuencia de caracteres no imprimibles.

Por ejemplo, podemos hacer un cambio en la variable, entrando la secuencia:

PS1="[\u@\H \W \!]\$"

y comparar el prompt que teníamos antes con el que aparece después de introducir el comando, como en el ejemplo:


justme@server:~$ PS1="[\u@\H \W \!]\$"
justme@justme.server.es:~$

Ahora, vayamos un poco más allá y cambiemos el color del usuario y el servidor (tanto el texto como el color de fondo).

De echo, podemos cambiar tres aspectos de cada sección, de acuerdo a la siguiente tabla:

Formato de Texto Color del texto Color del fondo
0: texto normal 30: Negro 40: Negro
1: negrita 31: Rojo 41: Rojo
4: Texto Subrayado 32: Verde 42: Verde
33: Amarillo 43: Amarillo
34: Azul 44: Azul
35: Violeta 45: Violeta
36: Cian 46: Cian
37: Blanco 47: Blanco

Vamos a usar el comando (carácter especial) \e al comienzo y el carácter m al finalizar, indicando que es un esquema de color. Los valores de formato, en la secuencia fondo, formato, color, deben estar separados por coma (o punto y coma si nuestro sistema tiene localización española). Por ejemplo, el siguiente texto introducido en la variable PS1, hará que el prompt se presente en amarillo, subrayado y con fondo rojo:


PS1="\e[41;4;33m[\u@\h \W]$ "

Si queremos que estos bonitos cambios permanezcan es decir, que aparezcan la próxima vez que abramos una terminal, tenemos que hacer más cambios, ya que estos valores desaparecerán en cuanto se acabe la sesión, cuando cerremos la terminal.

Haciendo permanentes los cambios.

Si usamos el shell Bash (lo más común) debemos modificar o crear un archivo en el directorio home que, dependiendo de la distribución, se llamará ~/.bashrc o ~/.bash_profile. En ese archivo, pondremos el comando para modificar la variable PS1, de acuerdo a nuestras preferencias, de ese modo, cada vez que abramos una terminal, ese archivo será leído previamente y la variable PS1 de esa sesión, será la establecida.

Anuncios

Déjame un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s