Pueden usarse secuencias de escape no imprimibles para producir efectos
interesantes en los prompts. Para usar estas secuencias es necesario
encerrarlas entre \[ y \], advirtiendo al bash de que ignore estas
secuencias cuando calcule la longitud del prompt. No incluir estos
delimitadores resulta en una colocación errónea del cursor en el código de
edición de línea, ya que no conoce el tamaño real del prompt. Las
secuencias de escape además deben ir precedidas de \033[ en bash
anteriores a la versión 2, o por \033[ o \[e en versiones
posteriores.
Si se intenta cambiar la barra de título de la Xterm con el prompt
mientras se está en la consola, se producirá basura en el prompt. Para
evitar esto, hay que comprobar la variable de entorno TERM para indicar
que el prompt va a estar en una xterm
function proml
{
case $TERM in
xterm*)
local TITLEBAR='\[\033]0;\u@\h:\w\007\]'
;;
*)
local TITLEBAR=''
;;
esac
PS1="${TITLEBAR}\
[\$(date +%H%M)]\
[\u@\h:\w]\
\$ "
PS2='> '
PS4='+ '
}
Esta es una función que puede ser añadida al ~/.bashrc. Entonces
se podrá invocar a la función mediante su nombre. La función, como la
cadena PS1, se almacena en el entorno. Una vez que la función ha dado
valor a la cadena PS1, se puede eliminar la función del entorno con
unset proml. Debido a que el prompt no puede cambiar de estar en una
Xterm a estar en la consola, la variable TERM no se comprueba cada vez que
se genera el prompt. He usado marcadores de comtinuación (contrabarras, \)
en la definición del prompt, para permitir continuarlo a lo largo de
varias líneas. Esto mejora la legibilidad, haciendo más fácil modificarlo
o depurarlo.
Lo he definido como una función porque es así como funciona el paquete
Bashprompt: no es la única manera de hacerlo pero funciona bien. A
medida que los prompts usados se tornen más complejos, resulta más y más
tedioso teclearlos en la línea de comando, y más práctico situarlos en
algún tipo de fichero de texto. En este caso, para probar esto como
prompt, salve lo de arriba como un fichero de texto llamado "proml". Se
puede trabajar con él de la manera que sigue:
[giles@nikola:/bin (4.498 Mb)]$ cd -> Ir a donde se
almacena el prompt
[giles@nikola:~ (0 Mb)]$ vi proml -> Editar el prompt
... -> Introducir el texto
de arriba
[giles@nikola:~ (0 Mb)]$ source proml -> Leer la función de
prompt
[giles@nikola:~ (0 Mb)]$ proml -> Ejecutar la función
de prompt
El primer paso en la creación del prompt es comprobar si el shell en el
que nos encontramos es o no una xterm; si lo es, estará definida la
variable de entorno ($(TITLEBAR)). Esta consiste de la secuencia de escape
apropiada, y \u@\h:\w, lo que escribe
<usuario>@<máquina>:<directorio> en la barra de título
de la Xterm. Esto es particularmente útil para xterm minimizadas
haciéndolas más rápidamente identificables. El resto de material de este
prompt debería ser familiar de prompts previos que hemos creado.
El único percance que puede darse
manipulando la barra de título de la xterm de esta forma ocurre
cuando se ingresa en un sistema en el que no se ha preparado la barra de
título: la xterm continuará mostrando la información del sistema
anterior que tenía la barra de título manipulada.