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?



"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*"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.