Après de nombreuses itérations grandes et laides et des cas de bord é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) tronqueront toujours votre historique:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Ensuite, ajoutez ceci au bas de votre .bashrc:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://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 historique complet en mémoire, mais même si votre fichier historique atteint 10 Mo (ce qui prendra très, très longtemps ), vous ne remarquerez pas beaucoup d'effet sur le temps de démarrage de bash.