0 votos

Evitando entradas duplicadas en bash_history usando ignoreboth: erasedups no funciona

Estoy en Catalina usando iterm pero sé que he estado enfrentando este problema durante años. No me sorprendería si esto está relacionado con ¿Por qué se borra periódicamente .bash_history? cuya respuesta explicó por qué mi historial de bash se comportaba de la forma en que lo hace. Sin embargo, este problema aún necesita respuestas.

Mi .bashrc tiene todo esto relacionado con el historial incluyendo HISTCONTROL=ignoreboth:erasedups:

   HISTFILESIZE=10000
   HISTSIZE=10000
   HISTTIMEFORMAT="%d/%m/%y %T "
   export HISTCONTROL=ignoreboth:erasedups
   shopt -s histappend

Sin embargo, veo duplicados, vea el último ejemplo:

 4637  30/09/22 11:31:53 git checkout master
 4638  30/09/22 11:33:51 git checkout misc15_db-change
 4639  30/09/22 11:33:54 git stash pop
 4640  30/09/22 11:34:04 git add -u
 4641  30/09/22 11:34:10 git diff --staged
 4642  30/09/22 11:31:53 git checkout master
 4643  30/09/22 11:33:51 git checkout misc15_db-change
 4644  30/09/22 11:33:54 git stash pop
 4645  30/09/22 11:34:04 git add -u
 4646  30/09/22 11:37:01 git diff --staged

Lo interesante de ver aquí es que la mayoría de estos duplicados son del mismo marca de tiempo con la excepción de la última entrada de git diff --staged, que aún no debería estar ahí.

1voto

Kel Puntos 710

Los duplicados no secuenciales son un comportamiento esperado

Este es un comportamiento esperado, como descubrí hace algún tiempo. ignoreboth:erasedups simplemente no borra los duplicados no secuenciales. Consulta ¿Cómo puedo eliminar duplicados en mi .bash_history, preservando el orden? en Unix.SE.

Solo borran duplicados secuenciales - así que en esta línea de comandos:

4639  30/09/22 11:33:54 git stash pop
4642  30/09/22 11:31:53 git checkout master
4644  30/09/22 11:33:54 git stash pop

git stash pop se registrará dos veces. Pero si mi línea de comandos fuera así:

4642  30/09/22 11:31:53 git checkout master
4639  30/09/22 11:33:54 git stash pop
4644  30/09/22 11:33:54 git stash pop

git stash pop no se registrará dos veces como queríamos.

Las copias de comandos, no duplicados, se deben al manejo de bash_history en macOS

Esto está explicado en la respuesta de jksoegaard para ¿Por qué se borra periódicamente .bash_history?

Extracto relevante de esta:

...Si cierras múltiples sesiones de bash al mismo tiempo (por ejemplo, cerrar una ventana terminal con varias pestañas), podrías perder parte o toda la historia.

...Básicamente lo que sucede es que tu historial actual se lee, el archivo se borra/mueve, y se crea un nuevo archivo donde se escriben todas las líneas de historial. Si este proceso se ejecuta varias veces al mismo tiempo, podrías ver que un proceso elimina el historial antiguo, el otro proceso lee un historial vacío, luego el primer proceso vuelve a escribir todo el historial...

He perdido historial de esta manera. Para solucionarlo, según mi respuesta a esa misma pregunta:

...Cierro una ventana (digamos ventana1) y noto que mi historial se borra en mi nueva ventana (ventana3) al verificar el recuento de registros de historial con history | less u algo similar. Noté que mi historial antiguo aún persiste en la ventana2 cuando lo comparo. Así que hago que escriba todo mi historial nuevamente ejecutando history -w en la ventana2. Luego actualizo el historial en ventana3 a través de history -r y esto me devuelve mi historial anterior allí.

El efecto secundario potencial que puede ocurrir, como se ve en el extracto de mi propio historial, es que puede causar que se dupliquen comandos exactos en el historial en lugar de simplemente duplicados.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X