Grabar el historial de la shell sincronamente

A todos los que utilizamos una shell de linux más o menos habitualmente nos ha pasado que hemos perdido información valiosa que creíamos que teníamos a buen recaudo en el historial.

Con el tiempo nos damos cuenta que el histórico de comandos que se graba en ~/.bash_history se actualiza cada vez que cerramos nuestra sesión (logout). Esto trae muchos problemas cuando tenemos abiertas varias sesiones simultáneamente ya que lo que grabamos en una al cerrar sesión se pierde cuando posteriormente cerramos otras sesiones. Las posibilidades de perder la información del histórico son muy grandes. Es raro que no se haya pensado en esto pues es algo muy común. Pues estamos equivocados nuevamente porque el problema se puede solucionar rápidamente con opciones de shell.

Basta con ejecutar

$ shopt -s histappend

Para que cuando se cierren una sesión de shell se añadan los comandos ejecutados en esta sesión al fichero de historial en lugar de sobrescribir su contenido.

Además también podemos hacer que los comandos se graben en el histórico justo después de ser ejecutados y no cuando se cierra la sesión. Basta con fijar esta variable de esta manera:

PROMPT_COMMAND=’history -a’

Hay que tener cuidado aquí si PROMPT_COMMAND ya ha sido inicializada y tiene algún valor podemos perderlo y es mejor hacer esto:

PROMPT_COMMAND=»history -a;$PROMPT_COMMAND»

Por su puesto podemos añadir estas dos lineas

shopt -s histappend
PROMPT_COMMAND=»history -a;$PROMPT_COMMAND»

a nuestro fichero ~/.bashrc para que se activen automáticamente estas opciones al inicio de la sesión. Y si tenemos acceso al root de la máquina y queremos que todos los usuarios tengan las mismas opciones activas podemos escribir las dos líneas en el fichero /etc/bash.bashrc

Bueno creo que este blog se esta convirtiendo poco a poco en un pequeño libro de recetas sobre pequeños problemas que van surgiendo al utilizar linux. Espero que sean de utilidad.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *