web-dev-qa-db-fra.com

Comment éviter les entrées en double dans .bash_history

La même commande est répertoriée dans mon historique, encore et encore. Comment puis-je éviter ça? Je sais que c'est possible via HISTCONTROL mais je n'ai pas trouvé le bon chemin.

107
karthick87

Dans la page de manuel bashname__:

HISTCONTROL

Liste de valeurs séparées par des deux-points contrôlant la manière dont les commandes sont enregistrées dans la liste d'historique. Si la liste de valeurs comprend ignorespacename__, les lignes commençant par un caractère d'espacement ne sont pas enregistrées dans la liste d'historique. Une valeur de ignoredupsprovoque l'enregistrement des lignes correspondant à l'entrée précédente de l'historique. Une valeur de ignorebothest un raccourci pour ignorespaceet ignoredupsname__. Une valeur de erasedupsentraîne la suppression de toutes les lignes précédentes correspondant à la ligne en cours de la liste de l'historique avant que cette ligne ne soit enregistrée. Toute valeur ne figurant pas dans la liste ci-dessus est ignorée. Si HISTCONTROL n'est pas défini ou n'inclut pas de valeur valide, toutes les lignes lues par l'analyseur Shell sont enregistrées dans la liste d'historique, sous réserve de la valeur de HISTIGNORE. La deuxième ligne et les lignes suivantes d'une commande composée multiligne ne sont pas testées et sont ajoutées à l'historique quelle que soit la valeur de HISTCONTROL.

Mettez donc la ligne suivante dans votre ~/.bashrc:

export HISTCONTROL=ignoreboth:erasedups

122
Isaiah

Collez ceci dans votre ~/.bashrc:

export HISTCONTROL=ignoredups

Vous pouvez plutôt utiliser ignoreboth. Ceci est un raccourci pour à la fois ignorespaces (commandes commençant par des espaces) et ignoredups (en double).

Je préfère ignoredups car je trouve que le comportement par défaut consistant à ignorer les commandes avec des espaces à l'avant est assez gênant lorsque je copie une commande d'un site Web et qu'elle n'est pas enregistrée car j'ai copié accidentellement dans un espace aussi .... Mais à chacun leurs propres.

23
Oli

Mettre ceci dans ~/.bashrc appliquera la solution de @ alvin à différentes sessions de la même manière

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
Prompt_COMMAND="history -n; history -w; history -c; history -r; $Prompt_COMMAND"

Source: Linux: Historique Bash: conflit de réglages "ignoredups" et "effacés" avec l'historique commun d'une session à l'autre

10
Nour Wolf
export HISTCONTROL=erasedups
4
withoutasound

Ajoutez ce qui suit à votre ~/.bashrc:

export HISTCONTROL=ignoredups

Pour ce faire, vous pouvez utiliser cette commande:

nano ~/.bashrc
3
jrg

Enregistrer uniformément chaque nouvelle commande est délicat. Vous devez d’abord ajouter à ~/.profile ou similaire:

HISTCONTROL=erasedups
Prompt_COMMAND='history -w'

Ensuite, vous devez ajouter à ~/.bash_logout:

history -a
history -w
0
Steven Penny