Historia destrozada

15

En el modo gui, cuando un usuario tiene más de un terminal abierto, ¿cómo reescriben el archivo de historial de ese usuario? la razón por la que pregunto es porque es muy posible que en cada una de las terminales el usuario termine ejecutando diferentes comandos. Entonces, ¿el archivo de historial termina guardando los comandos de todos los terminales o solo del primero en abrirse? ¿O hay algún otro tipo de esquema que se emplea para hacer frente a esta situación?

Arrendajo
fuente

Respuestas:

11

Depende completamente de cómo el shell elija manejarlo

bashde forma predeterminada, sobrescribirá el archivo de historial con el historial local de cada shell a medida que sale, por lo que gana el último shell para salir. La histappendopción hará que se agregue al historial maestro en su lugar ( shopt -s histappend).

zsh hace lo mismo de manera predeterminada y tiene algunas opciones para tratarlo:

  • appendhistory - El historial de cada shell se agrega al archivo de historial maestro a medida que el shell sale
  • incappendhistory - El archivo de historial maestro se actualiza cada vez que se ejecuta una línea en cualquier shell, en lugar de esperar hasta que ese shell salga
  • sharehistory- Me gusta incappendhistory, pero también extrae los cambios del archivo de historial maestro en todos los shells en ejecución, por lo que puede ejecutar un comando en un shell y luego presionar Upen otro shell y verlo
Michael Mrozek
fuente
Ahora dime cómo hacerlo en Bash por favor;)
tante
1
@tante shopt -s histappendno funciona?
Michael Mrozek
0

Originalmente obtuve esta idea del libro de O'Reilly "Unix Power Tools".

En mi .profilepongo:

export HISTFILE=$HOME/.sh_hist.$$

Cada vez que me .profileleen, recibo un nuevo archivo de historial con el PID de mi sesión. Si tengo varios inicios de sesión, cada inicio de sesión obtiene un archivo de historial único. Trabaja en kshy bash.

Si solo está abriendo nuevos terminales en una sesión X, generalmente no son shells de inicio de sesión, pero puede configurarlos para que actúen como shells de inicio de sesión. Por ejemplo, rxvt +lscomenzará rxvtcomo un shell de inicio de sesión. Verifique los documentos de cualquier terminal que esté utilizando.

Además, a menos que esté utilizando un archivo .logouto .bash_logout(o algún otro medio) para limpiar, eventualmente tendrá una gran cantidad de .sh_histarchivos.

mazianni
fuente
0

tcsh: set savehist = (5000 merge)fusiona

usuario39122
fuente