El “prompt” de mi consola.

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 
Nota

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] $

Nota

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:

Consola en mi escritorio

Haz clic sobre ella para agrandarla.

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.
\[\033

Nota

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 \033 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.

Final

Esto no es ni pretende ser un manual acerca de cómo manipular el prompt. Así mismo, cada usuario debe velar por la seguridad de su sistema y toda medida de precaución es siempre conveniente. Al manipular archivos se debe tener la sana prevención de hacer copias. Al manipular variables o valores en los archivos debemos cuidar no alterar otros.
Siempre corrobora la eficacia de una información. Yo puedo haberme equivocado en algo, desde unas comillas hasta una barra de más, que copiadas sin comprobación pueden ocasionar problemas, por los cuales no asumo la responsabilidad.

Para profundizar:

"Como" sobre el prompt en Bash, en español

Advanced Bash-Scripting Guide

Bash en Wikipedia

Programación en Bash, en español

10 comentarios

  1. Buenisimas las explicaciones, las voy a probar.

  2. Hola, acabo de encontrar tu blog, me parece muy bueno,
    Saludos

  3. Patricio, me agrada que te guste y espero que te pases por aquí a menudo. Eso infunde ánimos para continuar.

    Saludos

  4. q bien.. me paresio bien el tuto felicitaciones ;)
    no habia encontrado hasta el momento algun howto bien explicado del manejo del prompt ademas te luciste con los de lo de la lista de colores :D, animos, sigue asi ;)

  5. ¡Tocayo! Una belleza. Yo también estaba con un tuto para mi distro, pero más enfocado a los archivos que modifican el prompt en la estructura de GNU/LINUX Tuquito. ¿Lo puedo usar con un enlace referencial?

    Gracias, Suerte.
    Emilio.

  6. Emilio, perdona la tardanza.

    ¡Claro que puedes usarlo! Es un honor.

    Saludos, tocayo.

  7. brutalchrist

    muchas gracias! me sirvio bastante! =D

  8. Gracias.

    esta buenisimo el man, ahorita lo estoy aplicando para ver como queda:

    Chao

  9. Excelente, muy muy claro y de paso me explicó algunos conceptos q no tenía claros. Muchísimas gracias.

Trackbacks/Pingbacks

  1. Cambiar el color y formato del prompt « MALDITACONSOLA - [...] FUENTE Share this:TwitterFacebookMe gusta:Me gustaSé el primero en decir que te gusta esta post. Dejar un comentario…

Escribir un comentario

Creative Commons License