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?

¿Fue útil?

Solución

Usted dijo dos preguntas:

Cuál es la diferencia entre history -a y history -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:

http://stefaanlippens.net/bashdupplicates

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top