Agrega esto a tu .bashrc
(Linux) o .bash_profile
(Mac OS):
export HISTFILESIZE=
export HISTSIZE=
Ahí tienes, historia ilimitada. Actualmente tengo 27000 entradas :)
Desde man bash
:
Si HISTFILESIZE
no está configurado, no se realiza ningún truncamiento.
Eso significa .bash_history
nunca se trunca
También lo mismo parece aplicarse a HISTSIZE
, aunque no pude encontrar eso documentado.
Otra característica interesante que voy a probar es esta:
Si el HISTTIMEFORMAT
se establece la variable, las marcas de tiempo se escriben en el archivo de historial, se marcan con el carácter de comentario de historial, por lo que se pueden conservar en todas las sesiones de shell, como las siguientes:
export HISTTIMEFORMAT="%F %T "
Avísame si ya lo has probado...
(volviendo a publicar mi respuesta de https://stackoverflow.com/a/19533853/128597)
Después de muchas iteraciones grandes y feas y casos extremos extraños a lo largo de los años, ahora tengo una sección concisa de mi .bashrc dedicada a esto.
Primero, debe comentar o eliminar esta sección de su .bashrc (predeterminado para Ubuntu). Si no lo hace, ciertos entornos (como ejecutar screen
sesiones) aún truncará su historial:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Segundo, añade esto al final de tu .bashrc:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
Nota:cada comando se escribe inmediatamente después de ejecutarse, por lo que si accidentalmente pega una contraseña, no puede simplemente "eliminar -9 %%" para evitar la escritura del historial, deberá eliminarla manualmente.
También tenga en cuenta que cada sesión de bash cargará el archivo de historial completo en la memoria, pero incluso si su archivo de historial crece a 10 MB (lo que llevará un mucho, mucho time) no notará mucho efecto en el tiempo de inicio de bash.
Incluir en ~/.bashrc :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
Esta respuesta satisface los siguientes criterios:
-
un historial maestro separado (ninguna sesión puede interrumpir su historial)
-
escritura automática de historial (sin teclas de acceso rápido)
-
escrituras poco frecuentes (sin agregar después de cada comando)
fondo
En el inicio interactivo, si $HISTFILESIZE
se establece en un número, bash trunca $HISTFILE
a ese numero En el cierre interactivo, si la opción de shell histappend
está configurado, bash agrega $HISTSIZE
líneas a $HISTFILE
, de lo contrario sobrescribe $HISTFILE
.
consejos para OSX (Terminal)
Cada vez que se crea una pestaña en Terminal, ~/.bash_profile
se lee, lo que significa que bash no continúa leyendo su ~/.bashrc
. Agregue la siguiente línea a su ~/etc/bash_profile
:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
consejos para la pantalla
Si usa screen, su archivo de configuración es ~/.screenrc. Si desea que la pantalla registre el historial, solo necesita configurarlo para usar un shell de inicio de sesión que generará sus archivos de inicio bash (y registrará su historial).
# use bash, make it a login shell
defshell -bash