Aspecto Final del Prompt

Personalizar el Prompt de la terminal en Debian 7

Aspecto Final del PromptUna de las cosas que más me gustan de los sistemas operativos de tipo «Unix» es la posibilidad de personalizar el prompt de la terminal. Esta personalización incluye tanto la información que se mostrará en el prompt, como los colores en los que se mostrará dicha información.
En la mayoría de distribuciones Linux, el shell o interprete de comandos que se utiliza es bash, y aunque esta preferencia se puede cambiar, en este post se explicará como personalizar el prompt de bash, que es el interprete de órdenes por defecto en Debian 7.


1.- El fichero .bashrc

Para el interprete de comandos Bash existen tres ficheros importantes en el directorio de cada usuario. Estos ficheros son los siguientes:

  • .bash_profile: Se ejecuta una única vez al hacer login en el sistema.
  • .bashrc : Se ejecuta cada vez que se abre una ventana de terminal o se ejecuta una bueva instancia de Bash escribiendo el comando

    [sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
    #/bin/bash
    [/sourcecode]

  • .bash_logout: Se ejecuta cuando se sale del sistema. Lo podemos utilizar para que se borren los ficheros temporales creados en nuestra ultima sesión o registrar el tiempo que hemos estado utilizando el sistema. Si .bash_logout no existe, no se ejecuta ningún comando.

Si no existe en el directorio del usuario ninguno de estos ficheros, el sistema cogerá la configuración del fichero \etc\profile.

Nosotros trabajaremos sobre el fichero .bashrc que se encunetra en el directorio home de cada usuario.


2.- La variable de entorno $PS1

En bash, la configuración del prompt es una cadena de formato que se almacena en una variable de entorno llamada PS1. Esta variable suele definirse en el fichero .bashrc. Si escribimos en la terminal la siguiente orden, obtendremos la configuración actual del prompt.

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
#echo $PS1
[/sourcecode]

El resultado será similar a:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
${debian_chroot:+($debian_chroot)}\u@\h:\w\$
[/sourcecode]

¿Qué significan todos estos símbolos? Veámolos uno a uno:

  • ${debian_chroot:+($debian_chroot)} : Indica que si la variable de entorno $debian_chroot existe, se mostrará en el prompt el contenido de esta variable. En caso de que esta variable no exista, no se mostrará nada.
    En general dentro del contexto de bash, una expresión del tipo

    [sourcecode language=»bash» gutter=»false» wraplines=»false» highlight=»1″]
    ${var:+valor}
    [/sourcecode]

    significa : Si la variable var está definida, entonces usa valor, en caso contrario no hagas nada.
    Generalmente la variable de entorno $debian_chroot estará vacía, por lo que esta expresión no mostrará ninguna información en el prompt.

  • \u : Indica que se muestre el nombre del usuario actual.
  • @ : Simplemente pinta el símbolo @.
  • \h : Indica que se muestre el nombre de la máquina hasta el primer punto. Si el nombre de mi maquina fuera «miordenador.local» este carácter especial mostraría simplemente «miordenador«
  • : : De nuevo, simplemente pintamos el simbolo :
  • \w : Indica que se muestre el directorio de trabajo actual. El directorio home del usuario actual se representa con el símbolo ~
  • \$ : Si el usuario actual es el root, muestra el simbolo #. En caso contrario muestra el simbolo $

Por lo tanto, la expresión :

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
${debian_chroot:+($debian_chroot)}\u@\h:\w\$
[/sourcecode]

generará un prompt con la siguiente forma:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
usuario@maquina:/dir/trabajo$
[/sourcecode]

si se trata de un usuario normal, o bien

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
usuario@maquina:/dir/trabajo#
[/sourcecode]

Si se trata del usuario root.


3.- Listado de Caracteres Especiales de PS1

A parte de los caracteres especiales ya comentados en el apartado 2 existe toda una colección de caracteres especiales que podemos usar para personalizar nuestra variable de entorno. Son los siguientes:

  • \a : El carácter ASCII campana (07). Es el típico beep del ordenador.
  • \e: El carácter ASCII de escape (033).
  • \d : La fecha en formato «Dia(Nombre) Mes(Nombre) Dia(Numérico). Así para el día «Martes 11 de Marzo de 2014» el resultado sería «mar mar 11» algo así como «martes marzo 11»
  • \D {formato}: La fecha en el formato definido por la cadena formato (entre llaves). Esta cadena de formato es la aceptada por la función de C strftime(). Las opciones de formato para esta función son:
    • %a : Abreviatura del nombre del día de la semana.
    • %A : Nombre completo del día de la semana.
    • %b : Abreviatura del nombre del mes.
    • %B : Nombre completo del mes.
    • %c : Fecha y hora basadas en la configuración regional. Por ejemplo para el día «Martes 11 de Marzo de 2014» a las 21:00 este componente de la cadena de formato mostraría «11 mar 2014 21:00:00 CET».
    • %d : Número del día del mes. (01-31)
    • %H : Hora del reloj en formato 24h (01-24)
    • %I : Hora del reloj en formato 12h (01-12)
    • %j : Día del año como número (01-365)
    • %m : Mes como número (01-12)
    • %M : Minuto como número (00-59)
    • %S : Segundo como número (00-59)
    • %U : Número de la semana del año (00-53)
    • %w : Día de la semana como número(0-6), el Domingo es 0
    • %x : La fecha en el formato local. Por ejemplo 16/03/14 para el «16 de marzo de 2014»
    • %X : La hora en el formato local. Por ejemplo 21:04:48
    • %y : Año sin siglo como un número (00-99)
    • %y : Año con siglo como un número. Por ejemplo 2014
    • %Z : Es reemplazado por el nombre o la abreviatura del huso horario, o por ningún carácter si no se puede determinar el huso horario. Por ejemplo CET
    • %% : Muestra el caracter %
  • \a : El carácter ASCII escape(033).
  • \h : Indica que se muestre el nombre de la máquina hasta el primer punto. Si el nombre de mi maquina fuera «miordenador.local» este carácter especial mostraría simplemente » miordenador«
  • \H : Muestra el nombre de la máquina completo. Si el nombre de mi maquina fuera «miordenador.local» este carácter especial mostraría » miordenador.local«
  • \j : Número de tareas actualmente gestionadas por el Shell.
  • \n : Nueva línea.
  • \r : Retorno de Carro.
  • \s : El nombre del Shell.
  • \t : La hora actual en el formato de 24 horas HH:MM:SS.
  • \T : La hora actual en el formato de 12 horas HH:MM:SS.
  • \@: La hora actual en el formato de 12 horas am/pm.
  • \A : La hora actual en el formato de 24 horas HH:MM.
  • \u : Indica que se muestre el nombre del usuario actual.
  • \v : Nuestra la versión mayor y menor de Bash. Por ejemplo: 2.00 .
  • \V : Nuestra la versión mayor, menor y micro de Bash. Por ejemplo: 2.00.0 .
  • \w : Muestra el directorio actual en versión larga (con la ruta). El directorio home del usuario se representa con el simbolo ~.
  • \W : Muestra el directorio actual en versión corta (sólo el nombre del directorio). El directorio home del usuario se representa con el simbolo ~.
  • \! : Número del comando dentro del historial de comandos del usuario; esto es el número del comando dentro de todos los comandos ejecutados por el usuario en el sistema. Por ejemplo: 1, para el primer comando, 2 para el segundo, etc.
  • \# : Número de comando en la sesión actual del usuario; es decir el número de comando desde que hacemos login en el sistema.Por ejemplo: 1, para el primer comando, 2 para el segundo, etc.
  • \$ : Si el usuario actual es el root (UID = 0), muestra el simbolo #. En caso contrario muestra el simbolo $
  • \xyz : Muestra el carácter correspondiente al número octal xyz.
  • \\ : Muestra el carácter «\«.
  • \[ : Principio de una secuencia de caracteres no imprimibles. Estas secuencias de caracteres no imprimibles se usan para incluir en el promt secuencias de control de la terminal.
  • \] : Final de una secuencia de caracteres no imprimibles. Estas secuencias de caracteres no imprimibles se usan para incluir en el promt secuencias de control de la terminal.


4.- Listado de códigos de color

Además de elegir que elementos se mostrarán en el prompt, tambien se puede escoger de que color se mostrará cada uno de los elementos. Para ello, se seguirá la siguiente sintaxis:

\[\e[x;ym\]$X\[\e[0m\]

donde:

  • \[: Inicio de la secuencia de caracteres no imprimibles
    • \e[: Inicio del código de color.
      • x;y: Código del color a usar.
    • m: Fin del código de color.
  • \]: Fin de la secuencia de caracteres no imprimibles
  • $X: Caracteres que aparecerán coloreados.
  • \[: Inicio de la secuencia de caracteres no imprimibles
    • \e[: Inicio del código de color.
      • 0: Código del color por defecto.
    • m: Fin del código de color.
  • \]: Fin de la secuencia de caracteres no imprimibles

Nota : Es muy importante recordar que una vez establecido un color, todos los caracteres que se impriman a continuación, aparecerán de dicho color.Por ello una vez escrito el texto que se desea colorear, debemos restaurar el color por defecto (Código de color 0).

El listado de colores disponibles es el siguiente:

Código Color
0;30 Negro
1;30 Gris
0;31 Rojo
1;31 Rojo Claro
0;32 Verde
1;32 VerdeClaro
0;33 Marron
1;33 Amarillo
0;34 Azul
1;34 Azul Claro
0;35 Violeta
1;35 Violeta Claro
0;36 Cian
1;36 Cian Claro
0;37 Gris Claro
1;37 Blanco
0 Color por defecto

Veamos como se mostraría la siguiente variable prompt:

\[\e[01;32m\]\u\[\e[0m\]@\[\e[1;33m\]\h\[\e[0m\]:\$

Si coloreamos el texto en función de sus partes:

\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;33m\]\h\[\e[0m\]\$

Para verlo mejor, colorearemos cada sección del color en el que se mostrará finalmente:

\[\e[01;32m\]\u\[\e[0m\]@\[\e[1;33m\]\h\[\e[0m\]:\$

Eliminado los códigos de color y sustituyendo cada caracter especial por su significado nos quedaría:

usuario@host:$

5.- Ficheros bashrc

A continuación se muestran los enlaces de descarga para los ficheros bashrc tanto para un usuario normal, como para el usuario root:

[sdm_show_dl_from_category category_slug=»ficheros-bashrc» fancy=»1″ button_text=»Descargar» new_window=»1″]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *