¿Cómo funciona el comando de historial?

8

Cuando escribo cualquier comando en el terminal, no aparece en mi ~/.bash_historyarchivo hasta que salgo de mi sesión.

Además, cuando edito manualmente mi ~/.bash_historyarchivo (por ejemplo, elimino los últimos tres comandos), cuando escribo history, todavía muestra los comandos que eliminé del ~/.bash_historyarchivo. Solo cuando salgo de mi sesión y vuelvo a iniciar sesión desaparecen.

¿Cómo se sincronizan mi ~/.bash_historyarchivo y el historycomando?

sys0dm1n
fuente
"Cuando escribo cualquier comando en la terminal" No es realmente cierto. Cuando coloca un espacio delante del comando de forma predeterminada, no guarda ese comando.
Rinzwind
@Rinzwind, el comportamiento de guardar el comando, incluso si tiene un espacio al frente, se puede cambiar editando el valor de la variable de entorno HISTCONTROL.
sys0dm1n
@ sys0dm1n "por defecto"
Rinzwind

Respuestas:

10

Cuando abre un terminal bash, carga el contenido ~/.bash_historyy construye el historial del shell activo (en la RAM), agregando todos los comandos ejecutados en ese shell, y solo a él, no al archivo.

Solo cuando cierra un terminal bash, su historial se agrega a su ~/.bash_historyarchivo.


Opciones de history:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

Opciones para ~/.bashrcarchivo

Si desea cambiar este comportamiento para que el historial temporal se guarde ~/.bash_historydirectamente después de ejecutar un comando, agregue esta línea:

PROMPT_COMMAND="history -a"

Si además desea que cada terminal cargue automáticamente el ~/.bash_historyarchivo después de cada ejecución de comando, agregue esta línea en su lugar:

PROMPT_COMMAND="history -a; history -c; history -r"

Si desea excluir ciertos comandos (por ejemplo, todo lo que comienza con sudoy cat) de ser guardado, agregue esta línea:

HISTIGNORE="sudo*:cat*"
postre
fuente