Quelques considérations à avoir en tête pour comprendre la gestion de l’historique :
- Lorsqu’une console est lancée, elle récupère le contenu de
.bash_history comme historique initial, puis initialise un buffer local vide dans lequel elle stocke les commandes saisies au fur et à mesure du travail dans la fenêtre.
- À la sortie de la console (
exit ou fermeture par la croix), le contenu du buffer local (càd uniquement la liste des commandes tapées dans la fenêtre) est copié à la fin du fichier .bash_history.
Exemple facile avec 1 fenêtre
Imaginons que .bash_history contient les commandes :
A
B
exit
Si vous ouvrez une console et entrez la commande :
C
Alors quand vous sortez par exit, .bash_history contient les commandes :
A
B
exit
C
exit
Jusqu’ici c’est facile.
Exemple avec 2 fenêtres
Situation initiale, .bash_history contient les commandes :
A
B
exit
Dans la console 1 vous entrez la commande :
C
L’historique de cette fenêtre numéro 1 contient :
A (snapshot de .bash_history)
B (snapshot de .bash_history)
exit (snapshot de .bash_history)
C (buffer local)
Et dans la console 2 vous entrez la commande :
D
L’historique de cette fenêtre numéro 2 contient :
A (snapshot de .bash_history)
B (snapshot de .bash_history)
exit (snapshot de .bash_history)
D (buffer local)
Si vous sortez de la fenêtre 1 par exit, on aura dans .bash_history les commandes :
A
B
exit
C
exit
L’historique de la fenêtre 2 est inchangé (normal) :
A (snapshot de .bash_history)
B (snapshot de .bash_history)
exit (snapshot de .bash_history)
D (buffer local)
À partir de là, vous avez plusieurs options :
Option 1 : rafraîchir la fenêtre 2 en conservant son propre historique
On peut récupérer les nouveautés du fichier .bash_history (càd les commandes tapées dans la fenêtre 1) à l’aide de la commande history -n :
L’historique de la fenêtre 2 devient :
A (snapshot de .bash_history)
B (snapshot de .bash_history)
exit (snapshot de .bash_history)
D (buffer local)
history -n (buffer local)
C (nouveauté récupérée de .bash_history, commande de la fenêtre 1)
exit (nouveauté récupérée de .bash_history, commande de la fenêtre 1)
Notez que les nouveautés sont récupérées tout à la fin, comme si on venait de les taper dans la fenêtre 2.
Option 2 : réinitialiser la fenêtre 2 en perdant son historique
On peut écraser l’historique local de la fenêtre avec le contenu du fichier .bash_history à l’aide de la commande history -r :
L’historique de la fenêtre 2 devient :
A (relecture intégrale de .bash_history)
B (relecture intégrale de .bash_history)
exit (relecture intégrale de .bash_history)
C (relecture intégrale de .bash_history)
exit (relecture intégrale de .bash_history)
Notez que même la commande history -r tapée pour réinitialiser est absente (normal, elle était dans le buffer local qui vient d’être vidé).