Configurar el prompt de la consola bash

¿QUE ES BASH?

Descendiente del Bourne Shell, bash es un producto GNU, el Bourne Again Shell. Es el interfaz estándar de línea de comandos en la mayoría de las máquinas LiNUX. Potencia la interactividad, soportando edición en línea de comando, capacidad de completar o recordar automáticamente un comando, etc. También soporta prompts configurables – la mayoría de la gente se da cuenta de esto, pero no saben hasta qué punto.

terminal

¿PARA QUE SIRVE MANIPULAR EL PROMPT?

La mayoría de los sistemas LiNUX tienen un prompt por defecto en un solo color (normalmente gris) que indica el nombre de usuario, el nombre de la máquina en la que se está trabajando y alguna indicación acerca del directorio de trabajo actual. Toda esta información es útil, pero se puede ir mucho más allá: se puede mostrar todo tipo de información (número de «tty», hora, fecha, carga, número de usuarios, tiempo sin reiniciar …) y el prompt puede usar colores ANSI, ya sea por razones puramente estéticas, o para remarcar cierta información. También se puede manipular la barra de título de una xterm para reflejar parte de esta información.

¿PORQUE MOLESTARSE?

Además de una apariencia bonita, en ocasiones es útil seguir la pista de cierta información del sistema. Una idea que sé que gusta a la gente es que es posible poner los prompts de diferentes máquinas en diferentes colores. Si se tienen varias terminales X abiertas en diferentes máquinas, o si se tiende a olvidar en qué máquina se está trabajando y se borran ficheros equivocados, encontrará en esta una buena forma de recordar en qué máquina se encuentra.

PRIMER PASO

La apariencia del prompt viene dada por la variable del shell PS1. Las continuaciones de comandos se indican mediante la cadena PS2, que puede modificarse de la misma forma que aquí se comentan –ya que el manejo es exactamente el mismo, y que no es tan «interesante»–, casi siempre se van a tratar modificaciones de la cadena PS1 (También existen las cadenas PS3 y PS4. Estas nunca están a la vista del usuario medio (vea la página del manual sobre bash si está interesado en su propósito).

Para cambiar el aspecto del prompt, hay que cambiar la variable PS1. Para experimentar, se pueden introducir cadenas PS1 directamente desde el prompt, y ver los resultados inmediatamente (esto sólo afecta a la sesión actual, y los cambios desaparecen cuando termina). Si se desea hacer permanentes estos cambios, modifique su ~/.bashrc, y añada la nueva definición de PS1. Si tiene permisos de root, puede mirar en /etc/profile y modificar allí la línea PS1=. Tenga en cuenta que en algunas distribuciones (al menos en la RedHat 5.1) /etc/bashrc redefine los valores de PS1 y PS2.

Antes de comenzar, es importante recordar que la cadena PS1 se almacena en el entorno como cualquier otra variable de entorno. Si se modifica en la línea de comando, su prompt cambiará. Antes de hacer cualquier cambio, puede salvar su prompt actual en otra variable de entorno.


prompt_corregido

El prompt más sencillo sería el de un sólo carácter, como:

prompt_paso2

Esto demuestra la mejor manera de experimentar con prompts básicos: introduciéndolos en la línea de comando. Vea que el texto introducido por el usuario aparece inmediatamente después del prompt. Añadiremos un espacio a partir del carácter $ para ello lo encerramos entre comillas “”:

prompt_paso3

que fuerza un espacio después del prompt, haciéndolo más legible. Para restaurar el prompt original, basta con llamar a la variable almacenada:

prompt_paso4

SECUENCIAS DE ESCAPE DEL PROMPT BASH

Hay numerosas secuencias de escape ofrecidas por el shell bash para insertar en el prompt. De la página del manual del bash 2.02:

Cuando se ejecuta interactivamente, bash muestra el prompt primario PS1 cuando está listo para leer un comando, y el prompt secundario PS2 cuando necesita más datos de entrada para completar un comando. bash permite que estas cadenas de prompt sean modificadas insertando ciertos caracteres especiales escapados mediante contrabarra (\) que se decodifican de la manera siguiente:

  • \a carácter de campana ASCII (07)
  • \d la fecha en formato día mes día (p.ej., mar may 26)
  • \e carácter de escape ASCII (033)
  • \h el nombre del host hasta el primer «.»
  • \H el nombre del la máquina completo (FQDN)
  • \n carácter de nueva línea
  • \r retorno de carro
  • \s el nombre del shell, el nombre base de $0 (el fragmento que sigue a la última barra)
  • \t la hora actual en formato 24-horas HH:MM:SS
  • \T la hora actual en formato 12-horas HH:MM:SS
  • \@ la hora actual en formato 12-horas AM/PM
  • \u el nombre de usuario del usuario actual
  • \v la versión de bash (p.ej., 2.0)
  • \V la versión del paquete del bash, versión + patch-level (p.ej., 2.00.0)
  • \w el directorio actual de trabajo
  • \W el nombre base del directorio actual de trabajo
  • \! el número del comando actual en el histórico
  • # el número de comando del comando actual
  • \$ si el UID efectivo es 0, un #; en otro caso, $
  • \nnn el carácter correspondiente al número en octal nnn
  • \\ una contrabarra
  • \[ inicio de una secuencia de caracteres no imprimibles que pueden usarse para incrustar una secuencia de control del terminal en el prompt.
  • \] fin de una secuencia de caracteres no imprimibles

Continuando donde lo habíamos dejado:

prompt_paso5

prompt_paso6
Este es similar al prompt por defecto de la mayoría de las distribuciones LiNUX. Pero yo quería una apariencia ligeramente diferente, así que lo cambié por este:

prompt2
Escribiendo en el terminal la cadena:

PS1=”\[33[1;31m\][\t]\[33[0m\]\[33[1;32m\][\u:\#] \[33[1;34m\][\w] \$\[33[0m\] “

Desglosemos este prompt:

\[033[1;31m\][\t] .- Cadena que mostrará la hora entre corchetes y de color Rojo fuerte.

  • \[033[1;31m\][\t]”.- Esta es la secuencia de los caracteres no imprimibles.
  • “\[033[1;31m\][\t]”.- Abrimos un corchete para establecer el color.
  • “\[033[1;31m\][\t]”.- Cerramos la secuencia.
  • “\[033[1;31m\][\t].- Agregamos la secuencia de escape que mostrará la hora entre corchetes.

\[033[1;32m\][\u:\#].- Esta cadena muestra el nombre de usuario, el número de comando introducido y el color Verde Claro.

  • \[033[1;32m\][\u:\#]”.- Secuencia de caracteres no imprimibles.
  • “\[033[1;32m\][\u:\#]”.- Establece el color (Verde claro).
  • “\[033[1;32m\][\u:\#].
  • “\[033[1;32m\][\u:\#].- Mostrará el nombre de usuario (\u) y número de comando (\#) entre corchetes.

\[33[1;34m\][\w] $\[33[0m\].- Y este fragmento de la cadena muestra el nombre del directorio entre corchetes y con color Azul claro junto con el símbolo $ al final y un espacio adicional para que no se junten los textos..

  • \[033[1;34m\][\w] $\[033[0m\] “.- Secuencia de caracteres no imprimibles.
  • “\[033[1;34m\][\w] $\[033[0m\] “.- Establece el color (Azul claro).
  • “\[033[1;34m\][\w] $\[033[0m\] “.- Cerramos la secuencia.
  • “\[033[1;34m\][\w] $\[033[0m\] “.- Muestra el directorio entre corchetes.
  • “\[033[1;34m\][\w] $\[033[0m\] “.- Coloca un espacio y el signo
    $.
  • “\[033[1;34m\][\w] $\[033[0m\] “.- Para acabar con otra secuencia de caracteres de escape.
  • “\[033[1;34m\][\w] $\[033[0m\] “.- Establece el color a cero (el del terminal por defecto) y coloca otro espacio.
  • “\[033[1;34m\][\w] $\[033[0m\] .- Se cierra la secuencia

Y con esto tenemos el prompt que utilizo en mi consola bash. Prueba a configurar la tuya propia.

Otra secuencia bastante vistosa para nuestro prompt sería:

\[\e[34;1m\](\A)\[\e[0;1m\]-\[\e[31;1m\]{\h@\u}\[\e[0;1m\]-\[\e[32;1m\][\w]\[\e[0;1m\]\n└─ \[\e[34;1m\]\!\[\e[0;1m\]

Pruébala…

 

Anuncios
Esta entrada fue publicada en Consola bash. Guarda el enlace permanente.