Réponses:
Ajoutez ceci à votre .bashrc
(Linux) ou .bash_profile
(MacOS):
export HISTFILESIZE=
export HISTSIZE=
Voilà l'histoire illimitée. Actuellement, j'ai 27000 entrées :)
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 s’appliquer à HISTSIZE
, bien que je n’ai pas pu trouver cela documenté.
Une autre fonctionnalité intéressante que je vais essayer est la suivante:
Si la
HISTTIMEFORMAT
variable est définie, les horodatages sont écrits dans le fichier d'historique, avec le caractère de commentaire d'historique, afin de pouvoir être conservés au cours des sessions du shell, comme suit:
export HISTTIMEFORMAT="%F %T "
Faites-moi savoir si vous avez déjà essayé cela ...
gdb
; si vous définissez une HISTSIZE
variable, elle sera considérée comme un 0, désactivant ainsi totalement la taille de l'historique.
export
, HISTFILESIZE
c’est en nombre de lignes (pas en octets), et la troncation du fichier historique se produit lorsque vous définissez variableHISTFILESIZE
(et lorsque le shell se ferme). Donc, ne le configurez pas deux fois dans votre fichier de configuration avec des valeurs différentes ...
(republier ma réponse à partir de https://stackoverflow.com/a/19533853/128597 )
Après de nombreuses grandes itérations laides et des cas étranges au fil des ans, j'ai maintenant une section concise de mon .bashrc consacrée à cela.
Tout d’abord, vous devez commenter ou supprimer cette section de votre fichier .bashrc (par défaut pour Ubuntu). Sinon, certains environnements (tels que les screen
sessions en cours ) tronqueront 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. Par conséquent, si vous collez un mot de passe par inadvertance, vous ne pouvez pas simplement "tuer -9 %%" pour éviter l'écriture de l'historique, vous devez le supprimer manuellement.
Notez également que chaque session bash charge le fichier d’historique complet en mémoire, mais même si votre fichier d’historique atteint 10 Mo (ce qui prendra beaucoup de temps), vous ne remarquerez pas vraiment d’effet sur le temps de démarrage de votre bash.
HISTFILESIZE
. C’est pourquoi vous devez supprimer toute occurrence d’un tel événement, à l’exception de celui de votre choix. Il sera également tronqué à la sortie du shell (mais cela est prévu). Et vous ne devriez pas avoir besoin export
.
bash --norc
va tronquer à nouveau l'historique.
export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"
pour garder l'historique du shell séparé par session (basé sur le nom d'hôte et le nom de tty). Bien sûr, je dois d'abord créer le répertoire ~ / hist.
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
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)
écrit peu fréquent (pas d'ajout après chaque commande)
Au démarrage interactif, si $HISTFILESIZE
est défini sur un nombre, bash est tronqué $HISTFILE
sur ce nombre. À la fermeture interactive, si l'option shell histappend
est définie, bash ajoute des $HISTSIZE
lignes $HISTFILE
, sinon elle écrase $HISTFILE
.
Chaque fois qu'un onglet est créé dans Terminal, il ~/.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
Si vous utilisez screen, votre fichier de configuration est ~ / .screenrc. Si vous voulez que screen enregistre l'historique, il vous suffit de le configurer pour qu'il utilise un shell de connexion qui fournira vos fichiers de démarrage bash (et enregistrera votre historique).
# use bash, make it a login shell
defshell -bash
Un concept différent (peut ne pas être applicable) mais vous pouvez avoir un unlimited
historique lorsque vous utilisez shell-sink .