Existe-t-il un moyen de définir un historique illimité dans Bash?
83
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 uneHISTSIZE
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:Deuxièmement, ajoutez ceci au bas de votre .bashrc:
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.
la source
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 besoinexport
.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 :
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)
Contexte
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 shellhistappend
est définie, bash ajoute des$HISTSIZE
lignes$HISTFILE
, sinon elle écrase$HISTFILE
.astuces pour OSX (Terminal)
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
:conseils pour l'écran
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).
la source
Un concept différent (peut ne pas être applicable) mais vous pouvez avoir un
unlimited
historique lorsque vous utilisez shell-sink .la source