Lors de l’exécution, l’historique est uniquement conservé en mémoire (par défaut) si:
- set -o historique (un
H
dans echo "$-"
) est défini.
- HISTSIZE n'est pas
0
et
- HISTIGNORE n’est pas
*
(ou un autre schéma très restrictif).
En cas d'échec de l'un des éléments ci-dessus, aucun historique n'est stocké en mémoire et, par conséquent, aucun historique ne peut ni ne sera écrit sur le disque.
L’historique en mémoire est écrit sur le disque si:
- HISTFILESIZE n'est pas 0 et
- HISTFILE n'est pas désactivé.
Mais seulement lorsque le shell se ferme ou si les commandes history -a
(ajouter) ou history -w
(écrire) sont exécutées.
Pour déclencher une écriture immédiate sur le disque, vous pouvez utiliser la variable:
PROMPT_COMMAND='history -a'
qui sera append
les new
lignes de l'historique dans le fichier d'historique. Ce sont des lignes d’historique saisies depuis le début de la session bash en cours, mais qui ne sont pas déjà ajoutées au fichier d’historique.
Ou:
PROMPT_COMMAND='history -w'
Pour écraser l'historique dans HISTFILE avec la liste de la mémoire.
Vous pouvez donc supprimer une commande de l'historique en mémoire:
$ history 5
6359 ls
6360 cd ..
6361 comand --private-password='^%^&$@#)!@*'
6362 top
6363 set +o | less
$ history -d 6361
$ history 5
6359 ls
6360 cd ..
6361 top
6362 set +o | less
$ history -w
Et écrivez-le sur le disque avec la dernière commande:
history -w # with `shopt -u histappend` unset
.bash_history
fichier devient accidentellement la propriété de root, les choses cessent de fonctionner. Dans ce cas, vérifiez la propriété et utilisez-lasudo
pour la réparer si nécessaire.