Personaliza tu prompt

Linux Tutorial




Actualmente muchos somos los usuarios que permanecemos delante de una consola muchísimo tiempo. Y habitualmente, no estamos conectados siempre al mismo servidor o con el mismo usuario, sino que haciendo uso de conexiones de tipo ssh accedemos a diferentes máquinas con distintos “logins”.

En este punto es donde se hace especialmente importante la configuración del prompt de nuestra consola, sí esa línea que aparece justo antes de que podamos empezar a introducir comandos en el terminal. Esta configuración debería permitirnos ubicar información en el prompt sobre el usuario con el que estamos trabajando, la máquina en la que lo estamos haciendo o la hora a la que se está llevando a cabo el trabajo.

Para esta personalización del prompt bajo bash, existe una variable de entorno denominada PS1, que permite configurar exactamente la apariencia de que dispondrá el prompt de nuestro terminal.

Un prompt tremendamente sencillo podría ser:

export PS1="> "
>

Este otro, con una frase elegida por el usuario:

export PS1="Este es mi super prompt > "
Este es mi super prompt>

O este otro en el que el comando fortune escribiría una frase aleatoria cada vez que apareciese el prompt:

PS1="`fortune` \$ "
Reniego de grillos, aunque sean de oro fino. $

Pero lo que empieza a ser realmente interesante, es lograr que aparezca el nombre de usuario y el host al que se encuentra conectado, por ejemplo en este prompt:

export PS1="\u@\H > "
pepito@mimaquina>

Como se puede ver en el prompt anterior, existen dos caracteres especiales (\u y \H) que representan el login y el host. La lista completa de caracteres especiales que pueden emplearse para la definición del prompt es la siguiente:

\a El famoso “beep” al entrar en consola.
\d Fecha en modo “Mar Sep 08″.
\e El carácter ASCII escape.
\h Primera parte del hostname.
\H Todo el hostname (”perico.palotes.com”).
\j Número de procesos suspendidos presionando CTRL+Z.
\l El nombre en crudo del terminal (”ttyp4″).
\n Línea en blanco.
\r Retorno de carro.
\s El nombre del shell ejecutado (bash, cshell…).
\t Tiempo en modo 24 horas (”23:01:01″).
\T Tiempo en modo 12 horas (”11:01:01″).
\@ Tiempo en modo 12 horas am/pm.
\u Nombre de usuario.
\v Versión de bash.
\V Versión de bash, incluido “patchlevel”.
\w Directorio actual.
\W Direcorio de trabajo.
\! Posición en el historial del buffer del comando actual.
\# Número de comando.
\$ Usuario.
\# Root.
\xxx Modo de tres números por el que se conocen los caracteres ASCII (007).
\\ Una contrabarra.
\[ Esta secuencia aparecerá antes de una secuencia de caracteres que no muevan el cursor.
\] Esta secuencia aparecerá despues de una secuencia de caracteres que no muevan el cursor.

Dándole color
Además de lo visto hasta ahora, añadir color al bash es muy fácil, ya que éstos se seleccionan añadiendo una secuencia especial a la variable PS1.

Concretamente se logra incluyendo un valor numérico entre \e[ (equivalente a \033[) y m.

Este comando nos dejaría un bonito prompt verde:

export PS1="\e[32;40m\w> "
~> ls -l

Para que el resto de lo que escribamos no tenga un tono verde, deberemos indicar que al final se devuelva el color por defecto reseteándolo como sigue:

export PS1="\e[32;40m\w> \e[0m"
~> ls -l

Y por último os presento mi prompt, en el que se incluye la hora actual, el usuario, el host y el directorio actual:

PS1="\[\e[0;33m\]\t\[\e[0;32m\][\[\e[0;32m\]\u \[\e[0;32m\]@\[\e[0;32m\]\h \[\e[0;32m\]:\W \[\e[0;32m\]]$ \[\e[0;0;37m\]“
14:43:23[pepito@mimaquina:~]$

Aquí os presento una lista de los colores de texto más usados, aunque siempre podréis probar con variarlos y observar la nueva tonalidad obtenida:

0;30 Negro
1;30 Gris oscuro
0;31 Rojo
1;31 Rojo claro
0;32 Verde
1;32 Verde claro
0;33 Marrón
1;33 Amarillo
0;34 Azul
1;34 Azul claro
0;35 Morado
1;35 Morado claro
0;36 Cyan
1;36 Cyan claro
0;37 Gris claro
1;37 Blanco

En cuanto a los colores de fondo, éste es el listado de aquellos números que se pueden indicar como valores para el tono del fondo:

40 Negro
41 Rojo
42 Verde
43 Marrón
44 Azul
45 Púrpura
46 Turquesa
47 Gris

Los colores de fondo se usan precediendo el valor del color del fondo a los ya visto para el color de la fuente. Por ejemplo, el valor \[\e[41;1;33m\] produciría texto amarillo sobre fondo rojo.

Por último, destacar que si no queréis tener que modificar la variable PS1 cada vez que accedáis a una nueva consola, deberéis incluir vuestra modificación a los ficheros ~/.bashrc y ~/.bash_profile.

Problema con GNU Emacs
Al modificar el color del prompt he encontrado que al intentar lanzar una shell (M-x shell) en Emacs, éste no entiende los códigos de colores de bash y muestra un prompt como el que sigue:

...pepito[0;32m@[0;32mmimaquina[0;32m:~[0;32m]$[0;37m

Ante este problema, la solución que he encontrado ha sido la de lanzar en lugar de una shell común, lanzar la shell propia de Emacs mediante el comando (M-x eshell). Aunque, no es una buena solución, porque la configuración de nuestra shell de bash no se mantiene, carecemos de alias y demás elementos de configuración.

La solución realmente buena es la que me ha comentado mi amigo Manu y que paso a detallar:

Añade esto en tu .emacs:

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

Y la consola de emacs reconocerá los códigos de colores y los interpretará correctamente.

Otra opción es poner condiciones en el .bashrc para tener diferentes prompts según el tipo de consola que se trate y así poner un prompt sin colores para la consola de emacs. Pero esta segunda opción es menos elegante.

También recomiendo para los usuarios de la consola dentro de emacs el paquete “emacs-goodies-el” que entre otras muchas “pijadas” para emacs soporta el autocompletado de mandatos en la consola al que tan acostumbrados estamos. Y que tanto hechamos de menos en una consola de emacs.

Compártelo   Suscríbete!!

Seguro que también te interesa

0 Comentarios ↓

    Jaluro

  • No hay comentarios aún.
    ¡Aprovecha y sé el primero en dejar uno!

Deja tu comentario

Por favor, no uses un lenguaje inapropiado, spam o cualquier otro tipo de conducta inadecuada. De lo contrario me reservo el derecho de eliminar y/o modificar aquellos comentarios que contengan algo de lo citado anteriormente.

:) xD :)) =)) ;) :p :( :(( #-o 8-| :-l :o :-? :-< :-s :^) m|-) m:| :s :$ (y) (n) /:) <:o) :)>- :-ss [-o< @:d/ ^:)^ m:d m:@ m:p m;) (h) :'( :mrgreen: (ap) (au) (ci) (co) (6) (&) (@) ~:> (8) (~) (g) (^) ~o) (h5) (yn) (pi) (pl) (l) (f) (k) (u) (w) 8-x :[ o-+ o-> o=>