GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo:¿Historial ilimitado de Bash/shell?

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:

  1. un historial maestro separado (ninguna sesión puede interrumpir su historial)

  2. escritura automática de historial (sin teclas de acceso rápido)

  3. 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

Linux
  1. Cómo usar los comandos del historial de Bash

  2. Cómo borrar el historial de línea de comandos BASH en Linux

  3. Cómo hacer eco de una nueva línea en Bash Shell Scripts

  4. Cómo incluir un archivo en un script de shell bash

  5. Cómo grep una sección de un archivo en bash Shell

Cómo habilitar la marca de tiempo en el historial de Bash en Linux

Cómo usar el comando Declare en Linux Bash Shell

Cómo instalar Linux Bash Shell en Windows 10

Cómo verificar si existe un archivo o directorio en Bash Shell

Cómo borrar el historial de Bash en Linux y Mac

¿Cómo usar Linux Bash Shell dentro de Windows 10?