Historia -A vs Historia -W en Bash
-
27-10-2019 - |
Pregunta
Estoy escribiendo mi PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
Pero todavía obtengo algunos duplicados de diferentes sesiones terminales. Parece que todavía obtendré algunos duplicados, pero obtengo menos usando el comando PROMPT_COMMAND="history -w;$PROMPT_COMMAND"
.
Sé que puedo hacer el history -a;history -c; history -r
Pero no quiero que todos se sincronicen. Solo quiero que eso ocurra cuando llamo a la historia -n. Básicamente, estoy en uso de History -A o History -W, pero parece que no puedo encontrar la diferencia entre los dos. ¿Cuál sería mejor tener que evitar tantos duplicados como sea posible?
Solución
Usted dijo dos preguntas:
Cuál es la diferencia entre
history -a
yhistory -w
?
history -a
voluntad adjuntar Su historial de sesión actual al contenido del archivo de historial.
history -w
voluntad reemplazar El contenido del archivo de historial con su historial de sesión actual.
¿Cuál evita más duplicados?
Teóricamente tampoco. Ninguno de los dos -a
ni -w
Verificación de duplicados. Prácticamente -w
Evita más duplicados porque reemplaza el contenido del archivo de historial. Cualquier posible entrada duplicada en el archivo se elimina, junto con cualquier otra cosa en el archivo.
Lea más sobre el history
dominio en el manual de bash.
Un poco más de información sobre otras posibilidades para matar duplicados:
La variable Bash especial HISTCONTROL=ignoredups
No ayuda mucho aquí porque eso solo elimina los duplicados a medida que se ingresan en el shell en ejecución. No hace nada para evitar duplicados existentes en el historial actual o en el archivo del historial. Es más ignoredups
Solo ignora los comandos que es un duplicado del comando anterior, no si es un duplicado de algún comando previamente en la historia.
Lamentablemente ni siquiera los muy prometedores HISTCONTROL=erasedups
ayuda mucho aquí. erasedups
Borra cualquier entrada de historial que coincida con el comando actualmente ingresado. Lamentablemente, solo lo hace en el historial de sesión actual. No busca duplicados en el archivo de historial. Tampoco evitará que los duplicados ingresen al historial de su sesión cuando use history -n
.
Lea más sobre el variable especial HISTCONTROL
en el manual de bash.
Otros consejos
Puedes evitar duplicados usando esto
export HISTCONTROL=ignoredups
Puede ver esto para obtener más información:
Use la variable Bash PROMPT_COMMAND
con history
y usando sort
y uniq
Comandos:
$> export PROMPT_COMMAND="history -a && history -c && sort ~/.bash_history | uniq > ~/.bash_history_new && rm ~/.bash_history && mv ~/.bash_history_new ~/.bash_history && history -r"
Con esto no necesitas configurar shopt -s histappend
y hacer export HISTCONTROL=erasedups
.
Esto mantendrá su historial e historial sin duplicados sobre la marcha. Puede jugar con los comandos de mantenimiento del historial en orden se ha escrito (pista: use números de línea en la historia, ordene desde la posición de inicio de línea específica y después de eliminar los duplicados, vuelva a ordenar con los números de línea).