You are on page 1of 3

Lnea de Comandos LINUX USER

Configuracin del prompt de Bashier sitio

TUNEA TU PROMPT
cmo adaptar a la medida de cada cual el prompt de la shell con secuencias de control y color. POR HEIKE JURZIK
as secuencias de control ANSI para el color y control de posicin del cursor permiten a los usuarios disear un prompt de Bash funcional y a la medida de sus propias necesidades. Los seguidores de la lnea de comandos a menudo encuentran difcil ver el prompt para terminales X. Si el de una mquina remota tiene un aspecto distinto al de la mquina local, puede salvarnos de inadvertidos comandos de cierre o apagado, y si un usuario sin privilegios ve un prompt verde y root ve uno rojo, podran evitarse errores de configuracin o incluso prdida de datos. Un prompt de la shell confeccionado a medida de las necesidades propias puede ayudar a prevenir este tipo de confusiones. El prompt predeterminado de Bash tiene la misma apariencia prcticamente en todas

La adicin de color al prompt puede ayudar a evitar errores de configuracin y prdida de datos. Mostramos

las distribuciones Linux. El sistema SUSE Linux establece user@host: ~ > para usuarios normales, mientras que para usuarios Debian ser user@host: ~ $. La tilde representa el directorio de inicio del usuario. En otras palabras, el prompt muestra el directorio de trabajo actual en ambos sistemas, ofreciendo una ayuda orientativa al usuario. Si en Debian cambiamos al directorio a /var/log, el prompt ser como sigue:
user@host: /var/log$

La mayora de los sistemas Linux cambian el prompt del usuario root. El nombre del usuario se omite y vemos el smbolo almohadilla (#) en lugar de corchetes o del smbolo dlar.

Listado 1: Opciones de Hora


01 chicken@samesame ~$ export PS1=[\t] \u@\h \w$ 02 [20:53:03] chicke@samesame ~$ export PS1=[\T] \u@\h \w$ 03 [08:53:06] chicke@samesame ~$ export PS1=[\@] \u@\h \w$ 04 [08:53] chicke@samesame ~$

La variable de entorno $PS1 [1] define la apariencia del prompt de Bash, la cual aparece despus de introducir un comando. Podemos modificar temporalmente $PS1 en la shell actual para realizar comprobaciones. Cuando conseguimos que el prompt tenga la apariencia que necesitamos, podemos hacer que los cambios sean permanentes modificando el fichero de configuracin de Bash, ~/.bashrc. Buscamos las opciones predeterminados para $PS1, comentamos la lnea insertando una almhadilla (#) al comienzo y aadimos nuestra propia versin. Si alguno de los experimentos con el prompt en el par de sesiones que presentaremos a continuacin se tuerce, recomendamos cerrar la sesin actual de Bash e iniciar una nueva shell o invocar a source ~/.bashrc para restaurar el prompt predeterminado.

Un Nuevo Formato
Para eliminar el nombre de usuario y el nombre de host del prompt y usar un prompt corto, pero con el smbolo dlar, haremos lo siguiente:

Alexandre, Fotolia

WWW.LINUX- MAGAZINE.ES

Nmero 35

85

LINUX USER Lineas Lnea de de Comandos Comandos: Prompt de Bash

Si deseamos que el prompt nos diga la hora, disponemos de tres opciones de presentacin: \t, que lo har en formato de 24 horas (formato HH:MM:SS), \T para un reloj de 12 horas (formato HH:MM:SS) y \@ (formato HH:MM) que tambin presenta un reloj de 12 horas. Los corchetes ayudan a formatear la salida (ver Tabla 1).
Figura 1: Si en el prompt usamos la secuencia de escape \W en lugar de \w, slo veremos el nombre del directorio actual.

Colorn, Colorado
Los cdigos de color ANSI [2] pueden ayudarnos a colorear el prompt. Necesitaremos entrecomillar todo lo hay que entre las secuencias de control \[\e[ y \] (vase la Tabla 1). Para colorear el prompt con la hora de la ltima seccin de color verde, aunque mostrando la hora en azul: comenzamos escribiendo \[ para abrir la secuencia de control. definimos el color (\e[0;34m) cerramos la secuencia de control con \] configuramos la hora (por ejemplo, en formato de 24 horas) en corchetes: [\T] cambiamos el color a verde para el nombre de usuario y para el nombre del host (\[\e[0;32m\]\u@\h)

chicken@samesame:~$ U export PS1=$ $ls bin/ easy/ user/

$ export PS1=\u@\h$ chicken@samesame$

Esto evita gastar espacio, aunque parece un poco agobiante. Si preferimos un espacio entre el smbolo dlar y el comando, simplemente coloca el espacio y el smbolo dlar entre comillas:
$export PS1=$ $ ls bin/ easy/ user/

Lo que ha desaparecido ahora es el directorio de trabajo actual. Si cambiamos de directorio sin poder ver el directorio de trabajo actual en el prompt, debemos introducir pwd (print working directory) para encontrar dnde estamos en el rbol de directorios. Con las secuencias de escape \w y \W esto se cambia fcilmente. El primero presenta la ruta completa y puede ser extremadamente largo, mientras que el segundo slo muestra el nombre del directorio actual (vase la Figura 1).

Esto tambin se aplica a las secuencias de salida de Bash (vase la Tabla 1). Siempre que el valor de $PS1 incluya una secuencia de escape, un espacio blanco, o un carcter no estndar, necesitaremos colocar la expresin entre comillas. Las secuencias de escape permiten a los usuarios pulir el prompt hasta extremos insospechados. Si deseamos ver el nombre de usuario y del host actual, podemos presentarlos introduciendo \u y \h. Si dividimos estos nombres con un smbolo at (@), los resultados sern bastante buenos:

Tabla 1: Secuencias para el Prompt


Carcter \d \e \h \H \j \l \n \r \s \t \A \T \@ \u \v \V \w \W \! \# \$ \nnn \\ \[ \] Significado Formato Corto de fecha (e.g., Tu Jul 24) Carcter escape (^[) Nombre de host corto (hasta el primer punto. Por ejemplo: samesame) Nombre de host largo (Por ejemplo: samesame.chickenix.org) Nmero de trabajos corriendo en esta shell Nombre base del terminal (Por ejemplo: 10 si tu terminal es pts/10) Nueva lnea Retorno de carro Nombre del shell (Por ejemplo: bash) Hora en formato 24-horas (HH:MM:SS; Por ejemplo: 22:11:55) Hora en formato de 24-horas sin segundos (HH:MM; Por ejemplo: 22:11) Hora en formato de 12-horas (HH:MM:SS; Por ejemplo: 10:11:55) Hora en formato de 12-horas sin segundos (HH:MM; Por ejemplo: 10:11) Nombre de usuario (Por ejemplo: chicken) Versin Bash que estamos usando (Por ejemplo: 3.1) Edicin de Bash con nmero de versin y nivel de patch (Por ejemplo: 3.1.17) Directorio de trabajo actual con nombre completo de ruta (Por ejemplo: chicken@samesame /etc/apt$, etc.) Directorio de trabajo actual, restringido a la carpeta actual (Por ejemplo: chicken@samesame apt$ si el usuario est actualmente en /etc/apt) Orden del comando en la historia Bash (Por ejemplo: 123, el comando nmero 123) Nmero de comandos en la sesin shell actual Muestra un smbolo dlar para usuarios no-UID 0 0 (=root), en otro caso un smbolo almohadilla (#) Nmero octal de tres dgitos nnn con los que puedes presentar cualquier carcter ASCII (Por ejemplo: \033 para Escape) El backslash (\) en s mismo Escape del carcter de control siguiente (Por ejemplo: secuencias de escape ANSI o secuencias de control del cursor ANSI) Cierra la entrada del carcter de control

Prompts para Todas las Ocasiones


Adems de $PS1 existen otras variables de entorno que afectan a la apariencia del prompt: $PS2, que aparece si se termina una lnea de comandos pulsando Enter, pero sin que haya terminado la instruccin (por que faltan las comillas o corchetes de cierre, por ejemplo), $PS3, que se usa para los elementos de control de seleccin de Bash, y $PS4, que aparece al comienzo de cada lnea mientras se est depurando el script. En este artculo me centr en $PS1 porque sus hermanos son demasiado poco comunes en el trabajo diario con la shell.

86

Nmero 35

WWW.LINUX- MAGAZINE.ES

Linea de Comandos: Lnea Prompt de Comandos de Bash LINUX USER

volvemos a cambiar a las opciones estndar, (\[\e[0m\]), y mostramos el directorio de trabajo actual y todo lo dems (Figura 2). Si preferimos ver un aviso cuando estemos trabajando como root, podemos usar diferentes colores para los prompts de root y de usuario normal. Para hacerlo, aadimos, a nuestra cuenta de usuario ~/.bashrc lo siguiente,
export PS1=\[\e[01;32m\]\u@\h\[ \e[00m\]:\w\$

Figura 2: Dando color al prompt con las secuencias de escape ANSI.

a continuacin, aadimos lo que sigue al fichero /root/.bashr:


export PS1=\[\e[01;31m\]\h\[\e[ 00m\]:\w\$
Figura 3: Llevando la cuenta a pesar de los nombres del largo path y con la hora, tambin.

El prompt del usuario normal ser totalmente verde, mientras que el de root ser rojo, lo que nos mantiene alerta para cuando trabajamos con los privilegios de root.

Movimientos del Cursor


Adems de las secuencias de control de color ANSI, existen secuencias de posicionamiento del cursor. Por ejemplo, \e[<n>A mueve el cursor hacia arriba y \e[<n>B hacia abajo <n> lneas; C lo mueve a la derecha y D a la izquierda (Tabla 2).

En combinacin con las secuencias de color, podemos crear prcticas y personalizadas apariencias para el prompt. Si a menudo nos encontramos en la parte inferior de una extensa ruta de directorios (con 60 a 70 caracteres), podemos disear un prompt para que adopte el aspecto de una lnea de estado, con la ruta y la hora en la parte superior del terminal y un sencillo prompt con un smbolo dlar (para el usuario habitual) o un smbolo almohadilla (para root) (Figura 3). Haremos lo siguiente:

Tabla 2: Secuencias de Control ANSI para Cursor


Carcter \e[<n>A \e[<n>B \e[<n>C \e[<n>D \e[<n>E \e[<n>F \e[<n>G \e[<n>;<m>H \e[<n>J Significado <n> lneas arriba (por defecto a 1 si no se especifica <n>) <n> lneas abajo (por defecto a 1 si no se especifica <n>) <n> espacios a la derecha (por defecto a 1 si no se especifica <n>) <n> espacios a la izquierda (por defecto a 1 si no se especifica <n>) Mueve el cursor al comienzo de la siguiente lnea (por defecto a 1 si no se especifica <n>) Mueve el cursor al comienzo de la lnea previa (por defecto a 1 si no se especi fica <n>) Mueve el cursor a la columna <n> Mueve el cursor a la lnea <n>, columna <m> (por defecto a 1 si no se especifica <n> o <m>) Limpia la pantalla; si <n> = 0 o no se espcifica, la instruccin limpia la pantalla desde la posicin del cursor actual al extremo inferior de la pantalla. Si <n> =1, el comando limpia la pantalla desde la posicin del cursor actual a la parte superior de la pantalla, y si <n> = 2, el comando limpia la pantalla completa. Borra parte de una lnea; si <n> = 0 o no se especifica, la instruccin borra desde el cursor hasta el final de la lnea. Si <n> = 1, la instruccin borra desde la posicin actual del cursor hasta el comienzo de la lnea, y si <n> = 2, borra la lnea completa. Arrastra <n> lneas hacia arriba; aparecen nuevas lneas por debajo (por defecto a 1 si no se especifica <n>) Arrastra <n> lneas hacia abajo; aparecen nuevas lneas por encima (por defecto a 1 si no se especifica <n>) Guarda la posicin del cursor. Restaura una posicin del cursor almacenada.

movemos el cursor una lnea hacia arriba ( \e[1A ) para evitar que la lnea de estado la empuje hacia fuera despus, almacenamos la posicin (\e[s), movemos el cursor a la esquina superior izquierda 1;1 (\e[H), coloreamos la salida de amarillo o rojo (\e[33;41;1m) y borramos desde la posicin del cursor hasta el final de la lnea (\e[K), obtenemos la ruta completa (|w), movemos el cursor 199 posiciones a la derecha (totalmente a la derecha \e[199C), movemos el cursos hacia atrs 8 posiciones a la izquierda ((\e[8D), obtenemos la hora en formato de 24 horas sin segundos (\A) en blanco o rojo (\e[37;41;1m), restauramos los colores predeterminados (\e[0m), usamos \e[4 ) para restaurar la posicin del cursor almacenado, e insertamos una nueva lnea ( \n ) y obtenemos el prompt (\$). El resultado siempre es una lnea de comando vaca, sin embargo, podremos conocer el directorio en el que estamos trabajando y la hora que es en I todo momento.

\e[<n>K

RECURSOS
[1] Lnea de Comandos: variables de entorno: http://www.linux-magazine. es/issue/32 [2] Cdigo de colores ANSI en la Wikipedia: http://en.wikipedia.org/ wiki/ANSI_escape_code#Codes

\e[<n>S \e[<n>T \e[s \e[u

WWW.LINUX- MAGAZINE.ES

Nmero 35

87

You might also like