Hay dos variables que controlan el tamaño del historial:
HISTFILESIZE El número máximo de líneas contenidas en el archivo de historial. Cuando a esta variable se le asigna un valor, el archivo de historial se trunca, si es necesario, para contener no más que ese número de líneas eliminando las entradas más antiguas. El archivo de historial también se trunca a este tamaño después de escribirlo cuando sale un shell. Si el valor es 0, el archivo de historial se trunca a tamaño cero. Los valores no numéricos y los valores numéricos inferiores a cero inhiben el truncamiento. El shell establece el valor predeterminado en el valor de HISTSIZE después de leer los archivos de inicio.
y
HISTSIZE El número de comandos para recordar en el historial de comandos (ver HISTORIAL a continuación). Si el valor es 0, los comandos no se guardan en la lista del historial. Los valores numéricos inferiores a cero dan como resultado que cada comando se guarde en la lista del historial (no hay límite). El shell establece el valor predeterminado en 500 después de leer los archivos de inicio.
Estas dos variables le permiten controlar el comportamiento de su historial. Básicamente, HISTSIZE
es el número de comandos guardados durante su sesión actual y HISTFILESIZE
es el número de comandos que se recordarán en todas las sesiones. Así por ejemplo:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
En el ejemplo anterior, dado que HISTSIZE
se establece en 10, history
devuelve una lista de 10 comandos. Sin embargo, si cierra sesión y luego vuelve a iniciar sesión, history
solo devolverá 5 comandos porque HISTFILESIZE
está configurado en 5. Esto se debe a que, una vez que sale de su sesión, sus HISTFILESIZE
líneas de su historial se guardan en su archivo de historial ( ~/.bash_history
de forma predeterminada, pero controlado por HISTFILE
) En otras palabras, los comandos se agregan HISTFILE
hasta que llegue a las $HISTFILESIZE
líneas en ese punto, cada línea posterior agregada significa que se eliminará el primer comando del archivo.
Puede establecer los valores de estas variables en su ~/.profile
(o ~/.bash_profile
si ese archivo existe). No los establezca en su ~/.bashrc
primer lugar porque no tienen nada que establecer allí y, en segundo lugar, porque eso provocaría un comportamiento diferente en los shells de inicio de sesión y no inicio de sesión, lo que puede ocasionar otros problemas .
Otras variables útiles que le permiten ajustar el comportamiento de su historial son:
HISTIGNORE
: Esto le permite ignorar ciertos comandos comunes que rara vez son de interés. Por ejemplo, podría establecer:
export HISTIGNORE="pwd:df:du"
Eso haría que cualquier comando a partir de pwd
, df
o du
que se ignoran y no se guarda en su historia.
HISTCONTROL
: Este te permite elegir cómo funciona el historial. Personalmente, lo configuré en lo HISTCONTROL=ignoredups
que hace que guarde comandos duplicados solo una vez. Otras opciones son ignorespace
ignorar los comandos que comienzan con espacios en blanco y erasedups
que provocan que todas las líneas anteriores que coincidan con la línea actual se eliminen de la lista del historial antes de que esa línea se guarde. ignoreboth
es la abreviatura de ignorespace e ignoredups.
HISTTIMEFORMAT
: Esto le permite configurar el formato de hora del archivo de historial. Vea la respuesta de Pandya o lea man bash
para más detalles.
Para más ajustes, tiene:
La histappend
opción bash. Esto se puede configurar ejecutando shopt -s histappend
o agregando ese comando a su ~/.bashrc
. Si esta opción está configurada
la lista de historial se agrega al archivo nombrado por el valor de la variable HISTFILE cuando el shell sale, en lugar de sobrescribir el archivo.
Esto es muy útil ya que le permite combinar las historias de diferentes sesiones (piense en diferentes terminales, por ejemplo).
El history
comando tiene dos opciones útiles:
Podría, por ejemplo, agregar estos dos comandos a su PROMPT_COMMAND
(que se ejecuta cada vez que su shell muestra el indicador, por lo que cada vez que inicia un nuevo shell y después de cada comando que ejecuta en él):
export PROMPT_COMMAND='history -a;history -r;'
Combinados, se aseguran de que cualquier nueva terminal que abra importará inmediatamente el historial de cualquier otra sesión de shell. El resultado es un historial común en todas las terminales / sesiones de shell.