Agregar la fecha y hora al prompt del shell Bash.

Enviado por siddharta el 18 Junio, 2009 - 17:53.

kterm.png

QUÉ HICE

Hice una modificación al prompt del shell Bash, para que muestre la fecha y hora de tal manera que en vez de verse así:

siddharta@kubuntu:~$

se vea así:

[2009-06-18 11:22:16] siddharta@kubuntu:~$

CÓMO LO HICE

Se modifica la variable de entorno PS1, que es la que despliega el prompt. Primero se hacen pruebas modificando dicha variable directamente en el shell, y después se modifica un archivo de configuración para que el cambio sea permanente. Primero explicaré cómo se configuran las variables y posteriormente cómo se aplican los cambios

Para la fecha (Date) se usa la siguiente sintaxis (observar que la letra D es mayúscula):

\D{}

y dentro de las llaves se deben acomodar -en el orden preferido- las variables para el día (%d), mes (%m) y año (%Y mayúscula para 4 dígitos, o %y minúscula para 2 dígitos), por ejemplo:

\D{%Y%m%d}

hará que la fecha se muestre así: 20090618 (siempre he preferido ese orden, usando la misma lógica que en hh:mm:ss). Para que se separen los valores agregué guiones:

\D{%Y-%m-%d}

y ahora se verá así: 2009-06-18

Para la hora (time) es más sencillo, ya que la sintaxis simplemente es:

\t

y se mostrará así: 11:54:23 (en formato de 24 horas). Al unir ambas combinaciones, de fecha y hora, la cadena quedaría así:

\D{%Y-%m-%d} \t

lo cual devolvería lo siguiente: 2009-06-18 12:15:07. Dejé un espacio en blanco antes de \t para que no quedaran pegados fecha y hora. Por último decidí agregar corchetes [ ] para visualizar fecha y hora dentro de un gran conjunto:

[\D{%Y-%m-%d} \t]

haciendo que se muestre así: [2009-06-18 12:17:59]

Luego procedí a probar la configuración que me gustó. Primero obtuve el valor actual de la variable PS1:

set | grep PS1

el resultado en mi equipo (Kubuntu 8.04) es el siguiente, y en esa línea se agregarán los parámetros de fecha y hora:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

el usuario se muestra mediante los caracteres \u , por lo tanto pondré la fecha y hora antes del usuario. Copié la línea anterior y la pegué en el shell, anteponiendo el comando export para aplicar de inmediato la nueva configuración, también agregué en el lugar indicado las variables de fecha y hora que ya expliqué (dejando un espacio en blanco para que no quede la hora pegada al usuario), y al final presioné Enter:

export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\][\D{%Y-%m-%d} \t] \u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

y ahora el prompt se ve así:

[2009-06-18 12:12:00] siddharta@kubuntu:~$

¡Me gusta! :) . Ahora es tiempo de hacer que el cambio sea permanente, y se verá cada vez que inice una sesión en la Terminal. Para ello modifiqué el archivo /home/siddharta/.bashrc (sin usar privilegios de root). Busqué la siguiente sección:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

y agregué la cadena [\D{%Y-%m-%d} \t] a la segunda línea, exactamente antes de \u que es el usuario, quedando así:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\][\D{%Y-%m-%d} \t] \u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

Se cierra el archivo guardando los cambios, y para que la nueva configuración se aplique de inmediato (si no se usó antes el comando export) se usa:

cd
. .bashrc

ó

cd
source .bashrc

Posteriormente hice lo mismo para el prompt de root, modificando (como root) el archivo /root/.bashrc .


POR QUÉ LO HICE

Por varias razones:

- puedo ver a qué hora terminó la ejecución de un comando, porque observo a qué hora el prompt volvió a estar disponible
- puedo ver la fecha y hora del equipo cuando me conecto vía SSH, sin tener que estar usando el comando date
- puedo tener un reloj en el prompt, y simplemente presiono Enter si quiero actualizarlo


fuentes:
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.htm...

Sidd.

Imagen de urazpian
Enviado por urazpian el 18 Junio, 2009 - 20:02.

Muy buen aporte junto con el del color.

Gracias.

Imagen de Astran
Enviado por Astran el 19 Junio, 2009 - 07:11.

Llevas un par de entradas en tu blog de lo más útil.
Las pondré en practica este fin de semana si tengo algo de tiempo!!

Imagen de PabliNet
Enviado por PabliNet el 5 Julio, 2009 - 03:03.

Fijate que el tutorial anterior puse una cosa nueva que descubrí gracias a éste, sos un capo, che.