Comment fonctionne la commande history?

8

Lorsque je tape une commande dans le terminal, elle n'apparaît dans mon ~/.bash_historyfichier que lorsque je quitte ma session.

De plus, lorsque je modifie manuellement mon ~/.bash_historyfichier (par exemple, je supprime les trois dernières commandes), lorsque je tape, historyil affiche toujours les commandes que j'ai supprimées du ~/.bash_historyfichier. Ce n'est que lorsque je quitte ma session et que je me reconnecte qu'ils disparaissent.

Comment mon ~/.bash_historyfichier et la historycommande sont-ils synchronisés?

sys0dm1n
la source
2
c'est dans la RAM ... Où est stocké l'historique de bash?
Zanna
"Lorsque je tape une commande dans le terminal" Ce n'est pas vrai. Lorsque vous placez un espace devant la commande par défaut, il n'enregistre pas cette commande.
Rinzwind
@Rinzwind le comportement d'enregistrement de la commande même si elle a un espace en face peut être modifié en modifiant la valeur de votre variable d'environnement HISTCONTROL.
sys0dm1n
@ sys0dm1n "par défaut"
Rinzwind

Réponses:

10

Lorsque vous ouvrez un terminal bash, il charge le contenu de ~/.bash_historyet construit l'historique du shell actif (dans la RAM), en lui ajoutant toutes les commandes exécutées dans ce shell - et seulement à lui, pas au fichier.

Ce n'est que lorsque vous fermez un terminal bash que son historique est ajouté à votre ~/.bash_historyfichier.


Options de history:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

Options pour le ~/.bashrcfichier

Si vous souhaitez modifier ce comportement afin que l'historique temporaire soit enregistré ~/.bash_historydirectement après l'exécution d'une commande, ajoutez cette ligne:

PROMPT_COMMAND="history -a"

Si vous souhaitez en outre que chaque terminal charge automatiquement le ~/.bash_historyfichier après chaque exécution de commande, ajoutez plutôt cette ligne:

PROMPT_COMMAND="history -a; history -c; history -r"

Si vous souhaitez exclure certaines commandes (par exemple tout ce qui commence par sudoet cat) d'être enregistrées, ajoutez cette ligne:

HISTIGNORE="sudo*:cat*"
dessert
la source