Ajoutez ceci à votre .bashrc
(Linux) ou .bash_profile
(Mac OS) :
export HISTFILESIZE=
export HISTSIZE=
Et voilà, historique illimité. Actuellement j'ai 27000 entrées :)
À partir de man bash
:
Si
HISTFILESIZE
n'est pas défini, aucune troncature n'est effectuée.
Cela signifie .bash_history
n'est jamais tronqué
La même chose semble également s'appliquer à HISTSIZE
, même si je n'ai pas trouvé cela documenté.
Voici une autre fonctionnalité intéressante que je vais essayer :
Si le
HISTTIMEFORMAT
variable est définie, les horodatages sont écrits dans le fichier d'historique, marqués du caractère de commentaire d'historique, afin qu'ils puissent être conservés à travers les sessions shell, comme suit :
export HISTTIMEFORMAT="%F %T "
Faites-moi savoir si vous avez déjà essayé...
(en republiant ma réponse de https://stackoverflow.com/a/19533853/128597)
Après de nombreuses itérations volumineuses et laides et des cas étranges au fil des ans, j'ai maintenant une section concise de mon .bashrc dédiée à cela.
Tout d'abord, vous devez commenter ou supprimer cette section de votre .bashrc (par défaut pour Ubuntu). Si vous ne le faites pas, certains environnements (comme l'exécution de screen
sessions) tronquera toujours votre historique :
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Deuxièmement, ajoutez ceci au bas de votre .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"
Remarque :chaque commande est écrite immédiatement après son exécution, donc si vous collez accidentellement un mot de passe, vous ne pouvez pas simplement "tuer -9 %%" pour éviter l'écriture de l'historique, vous devrez le supprimer manuellement.
Notez également que chaque session bash chargera le fichier d'historique complet en mémoire, mais même si votre fichier d'historique atteint 10 Mo (ce qui prendra un long, long temps), vous ne remarquerez pas beaucoup d'effet sur le temps de démarrage de votre bash.
Inclure dans ~/.bashrc :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
Cette réponse répond aux critères suivants :
-
un historique maître séparé (aucune session ne peut interrompre votre historique)
-
écriture automatique de l'historique (pas de raccourcis clavier)
-
écritures peu fréquentes (pas d'ajout après chaque commande)
contexte
Au démarrage interactif, si $HISTFILESIZE
est défini sur un nombre, bash tronque $HISTFILE
à ce nombre. A la fermeture interactive, si l'option shell histappend
est défini, bash ajoute $HISTSIZE
lignes à $HISTFILE
, sinon il écrase $HISTFILE
.
conseils pour OSX (Terminal)
Chaque fois qu'un onglet est créé dans Terminal, ~/.bash_profile
est lu, ce qui signifie que bash ne lit pas votre ~/.bashrc
. Ajoutez la ligne suivante à votre ~/etc/bash_profile
:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
conseils pour l'écran
Si vous utilisez screen, votre fichier de configuration est ~/.screenrc. Si vous voulez que l'écran enregistre l'historique, il vous suffit de le configurer pour utiliser un shell de connexion qui sourcera vos fichiers de démarrage bash (et enregistrera votre historique).
# use bash, make it a login shell
defshell -bash