Pour une raison quelconque, je ne parviens pas à faire en sorte que mon système conserve mon historique BASH après un redémarrage. Voici les sections pertinentes de mon ~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
Pour autant que je sache, ce sont toutes les options nécessaires (je sais que je pouvais garder l'historique à travers plusieurs redémarrages sans tout cela dans le passé). Cependant, malgré avoir ajouté ces options il y a plusieurs redémarrages, je perds encore la plupart de mon historique après un redémarrage. Il n'est pas vide, mais il n'a pas les 9999 lignes que j'avais avant de redémarrer.
Avant que quiconque se plaigne, oui, j'ai lu ces questions. J'ai mis en œuvre certaines de leurs suggestions comme indiqué ci-dessus, les autres étaient soit inutiles, soit non pertinentes:
- Perte d'historique Bash lors de l'utilisation de histappend
- Comment empêcher Bash de modifier l'histoire?
- Qu'est-ce qui détermine ce qui apparaît dans la commande bash history?
- Comment puis-je conserver mon historique de bash d'une session à l'autre?
- enregistrer régulièrement l'historique bash
Au cas où il pourrait y avoir d'autres commandes pertinentes, vous pouvez voir l'intégralité de ma commande ~/.bashrc
ici .
Alors, qu'est-ce qui me manque? Pourquoi mon historique n'est-il pas sauvegardé? Si quelqu'un pense qu'un autre fichier peut être pertinent, faites le moi savoir et je le posterai. J'ai vérifié en exécutant grep -i hist \.*
mon $HOME
qui a montré que le seul .
fichier pertinent contenant la chaîne hist
ou l' HIST
était .bashrc
.
J'utilise Linux Mint Debian Edition, GNU bash, version 4.2.36 (1) -release (x86_64-pc-linux-gnu) et mon émulateur de terminal préféré (au cas où cela soit pertinent) l'est terminator
.
MISE À JOUR:
Suite à la suggestion de @ mpy dans les commentaires, j'ai changé mon ~/.bashrc
pour définir HISTFILE=~/bash_history
par opposition à la valeur par défaut ~/.bash_history
et cela semble résoudre le problème des shells interactifs . Les shells de connexion affichent toujours le même comportement, avec l'historique tronqué aux 500
lignes. Cependant, aucune HIST
variable associée n'est définie dans les fichiers concernés:
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
Alors, pourquoi est mise HISTSIZE
et HISTFILESIZE
en ~/.bashrc
ne suffit pas à moins que je mets explicitement $HISTFILE
autre chose que la valeur par défaut ~/.bash_history
?
history
commande, la sortie que vous voyez est identique à ce que vous voyez, en cours d'exécution cat .bash_history
, à part les numéros de ligne? Je veux dire que la history
commande répertorie les horodatages ou d'autres informations? La raison pour laquelle je demande, c'est que si vous voyez ces trucs ésotériques, cela signifie qu'il y a un autre module / fonction / programme, qui dérange l'historique du shell et une version incorrecte ou boguée de quoi que ce soit, pourrait vous causer du chagrin .
;)
: Essayez un autre fichier en tant que HISTFILE, pas la valeur par défaut ~/.bash_history
. Explication très construite: je suppose que bash est votre shell par défaut, donc au démarrage du système, un shell non interactif est le parent de votre session X (je suppose également que vous utilisez X), qui ne saura rien de l'option histappend (car .bashrc n'est que lu par des shells interactifs), donc tant que ce shell parent s'exécute, tout va bien, mais à la fin (c'est-à-dire l'arrêt du système), il remplacera ~/.bash_history
(ce qui est par défaut) et gâchera votre historique ...