# Fonctionnement de l'historique de Bash

**URL:** <https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109>\
**Category:** Support Debian\
**Created:** [Novembre 8, 2023, 8:07 UTC](https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109 "2023-11-08T08:07:59Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![IPUFHEBEFEBULB](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/i/7ea924/32.png) [@IPUFHEBEFEBULB](https://www.debian-fr.org/u/IPUFHEBEFEBULB)\
**Post date:** [Novembre 8, 2023, 8:07 UTC](https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109/1 "2023-11-08T08:07:59Z")

</div>

Salut,

J’ai du mal à saisir comment fonctionne l’historique de bash, c’en est même agaçant parfois car je vais chercher une commande dans l’historique, ne pas la trouver, puis la retrouver plus tard pour une raison que j’ignore.

Par exemple, j’ouvre deux terminaux, je fais **history** , et j’ai deux historiques différents (j’ai fais la manipulation hier) :

```
  548 rm 1.txt 2.txt 3.txt -g
  549 rm 1.txt 2.txt 3.txt -f
  550 cat feze 
  551 rm dmesg 
  552 vim notes.txt 
  553 ps aux | grep byobu
  554 ps aux | grep tmux
  555 byobu -A -D -RR -fa -h 150000 -l -O -U
  556 byobu -D -RR -fa -h 150000 -l -O -U
  557 byobu -D -fa -h 150000 -l -O -U
  558 byobu -D -fa 150000 -l -O -U
  559 byobu -D -fa -l -O -U
  560 byobu -D -fa -l -U
  561 lslslslslslsls
  562 byobu-enable-prompt 
  563 cd
  564 cat .bashrc
  565 . .bashrc
  566 byobu-enable-prompt 
  567 source .bashrc
  568 byobu-enable-prompt 
  569 history

```

Et dans le deuxième :

```
  505 vim .bashrc
  506 source .bashrc
  507 hig r
  508 pp
  509 cd -
  510 nohup
  511 nohup nautilus
  512 nohup --help
  513 cd Bricolage/Vrac/
  514 vim Commandes_from_Deb.txt 
  515 evince 20231102_Livret_Accueil.pdf &; disown
  516 $(evince 20231102_Livret_Accueil.pdf &); disown
  517 evince 20231102_Livret_Accueil.pdf & disown
  518 exit
  519 exit
  520 tmux
  521 tmux a
  522 history

```

J’ai pris les dernières lignes de chaque retour à chaque fois.

Le plus rageant, c’est que quand je veux reproduire ce comportement que je n’explique pas, je n’y parviens pas x)

Est-ce que ça ne serait pas lié au fait d’ouvrir une nouvelle fenêtre ou une primo-fenêtre ? Je m’explique :

- j’ouvre deux terminaux : **/dev/pts/0** et **/dev/pts/1**. Ils ont logiquement chacun le même historique.
- je lance les commandes **a** , **b** et **c** sur **pts/0** , et **d** , **e** et **f** sur **pts/1**.
- **pts/0** aura bien **a** , **b** et **c** dans l’historique, mais pas **pts/1** , et vice-versa concernant **d** , **e** et **f**.
- si j’ouvre une nouvelle fenêtre ( **/dev/pts/2** ), elle ne contiendra pas **a** , **b** , **c** , **d** , **e** ou **f**.
- par contre, si je ferme tous les terminaux et que j’en ouvre un nouveau, il contiendra bien **a** , **b** , **c** , **d** , **e** et **f** …

Mais je comprends pas trop comment bash gère ça. Et je me vois mal fermer TOUS mes terminaux si par exemple j’ai lancé une commande complexe dans un terminal, que je l’ai fermé, et que pour y accéder de nouveau via l’historique il me faille fermer tous les autres terminaux…

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Novembre 8, 2023, 11:01 UTC](https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109/2 "2023-11-08T11:01:17Z")

</div>

Bonjour,

les paramètres par défaut de bash ne sont pas super pratiques de ce côté là.

Dans mon `.bashrc` j’ai ces quelques lignes:

```auto
shopt -s histappend
PROMPT_COMMAND="history -n; history -a"
unset HISTFILESIZE
HISTSIZE=2000

```

L’idée est qu’à la fin de chaque commande, celle-ci soit ajoutée au fichier d’historique `.bash_history`.

cf `man bash`, `history --help`

Il y a aussi plusieurs fils stackexchange sur le sujet:

> <https://unix.stackexchange.com/questions/6501/why-would-anyone-not-set-histappend-in-bash>

> <https://unix.stackexchange.com/questions/1288/preserve-bash-history-in-multiple-terminal-windows/1292#1292>

---

<div class="post-metadata">

**Author:** ![IPUFHEBEFEBULB](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/i/7ea924/32.png) [@IPUFHEBEFEBULB](https://www.debian-fr.org/u/IPUFHEBEFEBULB)\
**Post date:** [Novembre 8, 2023, 1:08 UTC](https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109/3 "2023-11-08T13:08:46Z")

</div>

Hello,

Merci pour ton retour. OK je vais tester ton astuce et parcourir les liens que tu m’as envoyé : )

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Novembre 9, 2023, 12:03 UTC](https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109/4 "2023-11-09T12:03:00Z")

</div>

salut,  
juste au cas où :  
dans le deuxième lien il est rappelé que les numéros de lignes peuvent changer et donc que !numero devient problématique

---

<div class="post-metadata">

**Author:** ![IPUFHEBEFEBULB](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/i/7ea924/32.png) [@IPUFHEBEFEBULB](https://www.debian-fr.org/u/IPUFHEBEFEBULB)\
**Post date:** [Novembre 10, 2023, 8:12 UTC](https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109/5 "2023-11-10T08:12:21Z")

</div>

Hello,

Ça marche, merci pour l’info.

---

<div class="post-metadata">

**Author:** ![IPUFHEBEFEBULB](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/i/7ea924/32.png) [@IPUFHEBEFEBULB](https://www.debian-fr.org/u/IPUFHEBEFEBULB)\
**Post date:** [Décembre 20, 2023, 1:39 UTC](https://www.debian-fr.org/t/fonctionnement-de-lhistorique-de-bash/89109/6 "2023-12-20T13:39:35Z")

</div>

Re,

Bon j’ai pris le temps d’éplucher un peu le fonctionnement de l’historique. En gros les commandes sont mises en cache jusqu’à la fermeture de la session puis écrites dans .bash\_history à l’ouverture d’une nouvelle session.

Mais quelques éléments m’échappent :

- les commandes en cache, elles sont placées où ? Dans le .bash\_history courant ?
- quand on ferme notre terminal, bash fait un diff ou un cmp sur un «&nbsp;.bash\_history général&nbsp;» et le .bash\_history de notre homedir et ajoute les dernières lignes du ~/.bash\_history au «&nbsp;.bash\_history général&nbsp;».
- et quand on ouvre une nouvelle session, bash récupère le contenu du «&nbsp;.bash\_history général&nbsp;» et le place dans le ~/.bash\_history ?

Si oui, il serait où ce «&nbsp;.bash\_history général&nbsp;» ?

Sinon j’ai lu le man de bash, et l’utilisation de history -n et history -a n’a rien changé…en tout cas je n’ai vu aucune différence de comportement.

Sinon il m’est arrivé un truc bizarre : plus aucune commande que je voulais récupérer n’était dans mon ~/.bash\_history. Donc j’ai checké dans ~, et j’ai vu un .bash\_history-06889.tmp de 2000 lignes - taille de HISTFILESIZE - qui contenait les commandes en question x) Vous sauriez ce qu’il s’est passé ?

Edit : est-ce que le cache en question ne serait pas .bash\_history ? Car j’ai l’impression que faire history indique à bash de lire un autre fichier d’historique :

- j’ai ouvert ~/.bash\_history
- j’ai modifié la deuxième ligne du fichier avec une chaine lambda.
- quand j’ai fait «&nbsp;history |grep la\_chaine\_lambda&nbsp;», aucune sortie.
- mais à l’ouverture d’une nouvelle session, j’avais bien un retour du grep en mode «&nbsp;2 la\_chaine\_lambda&nbsp;».

++
