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 anterior
[giles@nikola:~ (0 Mb)]$ source proml -> Leer la funcion de prompt
[giles@nikola:~ (0 Mb)]$ proml -> Ejecutar la funcion 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.