No se puede aumentar la longitud del historial del shell bash de Mac OSX

26

Configuré ~ / .bash_profile hace algún tiempo para que tenga más de 500 líneas de longitud, pero parece que el sistema no puede captar esto.

¿Sabes por qué?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500
biotecnología
fuente

Respuestas:

34

También necesitas configurar HISTSIZE=10000000.

HISTFILESIZEdetermina el número de líneas que se deben mantener en el archivo del historial, mientras que se HISTSIZEdetermina el número de líneas que se deben mantener en la memoria. Ambos predeterminados a500

Ejecute echo $HISTFILESIZE $HISTSIZEantes de realizar el cambio y luego nuevamente. Deberías ver 10000000 500primero y luego 10000000 10000000después.

Alano
fuente
16

Necesita exportar HISTSIZE y HISTFILESIZEvariables de entorno en su ~/.bash_profilearchivo.

Agregue las siguientes líneas en su ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000
Petr Javorik
fuente
9

Responder:

Todo lo que necesitas hacer es configurar HISTSIZEtu perfil de bash ( ~/.bash_profile). Puedes dejarlo sin HISTFILESIZE configurar . Esto configurará tanto el historial en memoria como el historial basado en archivos.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Explicación, información adicional.

El problema es que HISTFILESIZE solo establece el historial máximo almacenado en el archivo cuando inicia una sesión. HISTSIZE es lo que determina cuántas líneas se guardan al final de una sesión. Si HISTFILESIZE es más grande que su HISTSIZE, nunca se verá más que su HISTSIZE porque el archivo se sobrescribe cada vez con comandos HISTSIZE ( a menos que la historia conjunto de datos anexados, pero eso es un tema aparte: mirar hacia arriba histappenden la cáscara incorporado comandos para eso) .

Esta es la razón por la que no ves ningún efecto. Con HISTSIZE predeterminado (probablemente 500), su archivo de historial siempre se sobrescribe con los comandos $ HISTSIZE más recientes. Todo lo antiguo (que podría hacer crecer la lista más allá de $ HISTSIZE) se borra.

Para la mayoría de los casos, no es necesario establecer HISTFILESIZE independientemente de HISTSIZE.

HISTSIZE determina cuántas líneas se escribirán en el archivo de historial. La lista de comandos se trunca al salir, antes de escribir en el archivo de historial, manteniendo N líneas más recientes. Por defecto, esta lista sobrescribe el archivo de historial.

HISTFILESIZE determina qué tan grande puede ser el archivo de historial (en líneas). El archivo se trunca al inicio, manteniendo N líneas más recientes. Además, el archivo de historial se trunca potencialmente cada vez que se establece HISTFILESIZE.

Finalmente, aunque parece no estar documentado, BASH establece HISTFILESIZE en función de HISTSIZE si HISTSIZE está configurado durante el inicio. He probado esto en macOS y algunas variedades de Ubuntu, y el comportamiento es consistente. Si configura HISTSIZE en un archivo de inicio ( no a través de la línea de comando de ninguna manera), HISTFILESIZE se configurará para que coincida. (Pruébelo usted mismo: establezca HISTSIZE en algún valor arbitrariamente grande en .bash_profile, salga y comience una nueva terminal, echo $HISTSIZE $HISTFILESIZEy luego encontrará que coinciden).

Como resultado, no hay ninguna razón para tocar HISTFILESIZE a menos que desee valores diferentes, y los casos de uso para tener valores diferentes son raros (y generalmente implican más configuraciones de personalización del historial para obtener algo útil).

Zim
fuente
Tienes razón Zim. El código fuente de Bash muestra que solo establecerá HISTFILESIZE en HISTSIZE si HISTFILESIZE no está configurado. git.savannah.gnu.org/cgit/bash.git/tree/…
robert