MALDITACONSOLA

febrero 27, 2012

Cambiar el color y formato del prompt

Filed under: Uncategorized — csaitam @ 10:33 pm

Una de las cosas que más utilizo es la consola. Es el recurso por excelencia a requerir cuando queremos compilar un programa, ver los mensajes de error de alguna aplicación, buscar información local, manipular archivos, probar scripts, ordenar tareas, y sobre todo, cuando debemos administrar nuestra máquina (no digamos máquinas en redes, servidores o hacer revisiones e inspecciones, donde es imprescindible ). Por estas razones le doy mucha importancia al prompt que es el texto que antecede la línea de órdenes en una consola y que usualmente aparece así:

emilio@arcadia:~ $

o así:

root@arcadia:~ #

El primero aparece en mi consola personal, una vez que he ingresado con mi contraseña. El segundo aparece cuando ingreso como administrador del sistema o root, para utilizar el término clásico en el mundo Unix. Se puede observar que el prompt termina con el símbolo de # cuando estamos utilizando la consola como superusuario (root). También observamos que el formato es el siguiente:

nombre de usuario@nombre de maquina 

Debo señalar que en todo este texto me refiero a la consola, ejecutada con la “shell” bash . Una “shell” es una interfaz entre el sistema operativo y nosotros. Hay varios tipos de shell en los sistemas Unix, y Linux, como tal, puede disponer de cualquiera de ellas. El shell bash es el que viene de manera predeterminada en la mayoría de las distribuciones.

Mi línea de comandos o prompt luce así:

[emilio:1]  [~] $

He prescindido del nombre de máquina y he agregado un número de comando que me informe de la cantidad de veces que he intentado ejecutar un comando en la consola. Ese número puede servirme como referencia para “saber” que tengo n cantidad de comandos nuevos en el historial (a esto me referiré en otra ocasión).
Como puede observarse, mi prompt es muy simple, no me gusta que aparezca la fecha o información redundante que la recargue. Pero lo que sí deseo que quede muy evidente es la información del directorio actual, es decir, del lugar donde me encuentro en el momento que quiero manipular un comando. Así, si estoy en un directorio llamado videos en mi sitio, el prompt debe lucir de esta forma:

[emilio:1]  [~] $ cd videos
[emilio:2]  [~/videos] $

Por si no lo sabes, la tilde “~”, se refiere a “nuestro sitio”, en este caso, equivale a decir que estamos en “/home/emilio/videos”

Pero hay más. Mi prompt se muestra en colores, obviamente los que son de mi gusto y que pueden verse en esta imagen:

IMAGEN

Ahora veamos cuáles son los comandos que he colocado para que mi prompt luzca así:

PS1="\[\033[36m\] [\u:\#] \[\033[33m\] [\w] \$\[\033[0m\] ";

Los valores son asignados a la variable “PS1”, que es una de las cuatro variables que se usan para determinar los cuatro tipos de prompt en la shell bash.

Luego del operador de igualdad y la apertura de comillas, encontramos una primera secuencia de inicio de caracteres no imprimibles que nos permite escribir, a continuación de ella, las secuencias de control y secuencias de escape que definirán las características de nuestro prompt.
\[33

Se llama secuencias de escape a comandos de control que no representan una letra o signo de puntuación y que se inician con una barra invertida. Muchas de esas secuencias se crearon originalmente para controlar los antiguos teletipos (retorno de carro, emisión de sonido, tabulador) y por ello se les denominó secuencias de control, no imprimibles puesto que su destino no era mostrarse en pantalla o impresora. Las secuencias de escape en bash controlan la información que aparecerá en el prompt.

Luego de cada segmento, de caracteres que no se deben imprimir, se cierra la secuencia de caracteres no imprimibles escribiendo:
\]
Al final, en el último cierre de caracteres no imprimibles , dejamos un espacio para evitar que los comandos que escribamos aparezcan pegados al prompt, cerramos las comillas y colocamos un punto y coma que anuncia el fin de la asignación a la variable PS1.
Aunque parece complicado, es cuestión de visualizar dónde van las secuencias de escape. Antes de proseguir, veamos algunas de las secuencias que se pueden introducir en nuestro prompt:
Como podemos observar, he utilizado cuatro secuencias de esa lista:

\u el nombre de usuario del usuario actual
\w el directorio actual de trabajo
\# el número de comando del comando actual
\$ si el UID efectivo es 0, un #; en otro caso, $

El significado de las tres primeras es evidente. De la última basta saber que determina, de acuerdo a cierto valor capturado (el usuario no tiene intervención directa en ello) si el “dueño” del prompt es “root” en cuyo caso imprime el símbolo # o si no, imprimirá $.
Pero, ¿qué son esas extrañas secuencias de números, en particular, el 36m, 33m, 0m ? De entrada, recordemos que el 33 es parte del inicio de las secuencias de caracteres no imprimibles. Los otros números son la representación númerica de colores. En este caso, el 36m (siempre deben llevar esa “m” minúscula, no sé por qué) es el cyan claro, el 33m el marrón y el 0m nada, sin color, o lo que es lo mismo, que después del prompt, el texto vuelva a su color predeterminado.
Lo demás es “armar” correctamente las secuencias y colocar los corchetes que deseamos en nuestro prompt.

EJEMPLO

En primer lugar colocaremos la apertura de la secuencia de caracteres no imprimibles
\[\033
abrimos un corchete y establecemos el color
\[\033[36m
cerramos la secuencia
\[\033[36m\]
agregamos las secuencias de escape que se deben imprimir (usuario actual: número de comando). Nótese que aquí NO colocamos apertura de secuencia de escape no imprimibles.
\[\033[36m\] [\u:\#]
El resultado será este prompt:
[emilio:1]
continuamos, agregando otro inicio de secuencia de caracteres no imprimibles, el color (marrón en mi prompt) y el cierre de caracteres no imprimibles:
\[\033[33m\]
la línea se debe ver así:
\[\033[36m\] [\u:\#] \[\033[33m\]
Ahora agregamos los otros corchetes [ ] que aparecen en mi prompt, con la secuencia del directorio actual, es decir, que nos mostrará en qué directorio nos encontramos:
[\w]
luego, y sin corchetes, colocamos la secuencia que muestra el símbolo respectivo a usuario o root:
\$
y por último, abrimos una secuencia de caracteres no imprimibles y delvolvemos al texto el color predeterminado:
\[\033[0m\]
la línea completa luce así:
\[\033[36m\] [\u:\#] \[\033[33m\] [\w] \$\[\033[0m\]
Para que sea efectiva, necesitamos un par de cosas finales: encerrar la línea entre comillas dobles y dejar un espacio en blanco entre el último corchete y las comillas de cierre:
"\[\033[36m\] [\u:\#] \[\033[33m\] [\w] \$\[\033[0m\] "
Estos valores (la línea entera) se le asignan a la variable PS1. Puedes probarlo escribiendo en la consola y pulsar "enter":
PS1="\[\033[36m\] [\u:\#] \[\033[33m\] [\w] \$\[\033[0m\] "

Para seleccionar los colores te recomiendo usar el siguiente script que me bajé del
Bash Prompt Como
Cópialo y crea un archivo con o sin la extensión “sh”, por ejemplo, color.sh y desde la consola escribes sh ./color.sh, desde el mismo directorio donde tienes el archivo.
Verás los colores disponibles y los números que le corresponden en la secuencia. Los colores resaltados llevan además un 1 antecediendo al número del color, por ejemplo, el cyan resaltado es el 1;36m. En fin, esos son los valores que puedes colocar en la secuencia que lleva el color.
Para finalizar. Una vez que estés satisfecho con el prompt que quieres, querrás hacerlo permanente en tu sitio. En ese caso debes agregar la línea del prompt al archivo .bashrc (observa el punto inicial) que está localizado en el directorio raíz de tu sitio; en el mío, por ejemplo, se encuentra en “/home/emilio/” (si estás usando “Nautilus” o “Konqueror” para ver los archivos en tu directorio, debes habilitar la opción de ver archivos ocultos), ábrelo con tu editor favorito. Probablemente allí encontrarás una línea de asignación para PS1. No te aconsejo borrarla. Simplemente coméntala, agregando el símbolo # al inicio de la misma. Luego, escribes la línea de tu prompt (que supongo haz comprobado) y le colocas un punto y coma ( ; ) al final. La próxima vez que abras una consola mostrará tu nuevo prompt.

FUENTE

Anuncios

1 comentario »

  1. I’m truly enjoying the design and layout of your site. It’s a very easy on the eyes which makes it
    much more enjoyable for me to come here and visit more often.
    Did you hire out a designer to create your theme? Great work!

    Comentario por Hypothyroidism Diet — septiembre 29, 2013 @ 9:54 am


RSS feed for comments on this post. TrackBack URI

Responder

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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

Conectando a %s

Blog de WordPress.com.

A %d blogueros les gusta esto: