Comment éviter les entrées en double dans .bash_history
109
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 HISTCONTROLmais je n'ai pas trouvé le bon chemin.
J'ai créé une question connexe: askubuntu.com/questions/205520/… . Les doublons dans l'historique sont utiles pour voir le contexte d'une commande. Ce que vous voulez omettre, parfois, lorsque vous imprimez l’historique.
Justingordon
Réponses:
123
De la bashpage de manuel:
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 de l'historique Si la liste de valeurs comprend ignorespace, 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 d'historique précédente. Une valeur de ignorebothest un raccourci pour ignorespace et
ignoredups. Une valeur deerasedupstoutes les lignes précédentes correspondant à la ligne en cours sont supprimées 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 de shell sont enregistrées dans la liste de l'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.
Alors mettez la ligne suivante dans votre ~/.bashrc:
Voulez-vous que j'ajoute HISTCONTROL = ignoreboth au bas de ~ / .bashrc?
karthick87
1
@ karthick Peu importe où vous le mettez, le fond est bon.
Isaïe
Sur mon installation d'Ubuntu 12.04 , je devais faire cette modification dans la ~/.bash_loginplupart du temps , il fonctionnerait si .bashrc est modifié , mais ce n'est pas le cas tout le temps.
ck-
3
N'oubliez pas de les exécuter après la mise à jour de votre profil bash / de vos fichiers rc -source ~/.bashrc && source ~/.bash_profile
Eric Kigathi
23
Collez ceci dans votre ~/.bashrc:
export HISTCONTROL=ignoredups
Vous pourriez 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 moi- ignoredupsmême, 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 que celle-ci n'est pas enregistrée car j'ai copié accidentellement dans un espace aussi. chacun leur propre.
Il existe encore des doublons. Quel peut être le problème? imgur.com/fXeLQ.png
karthick87
5
@ karthick87 cité d'une autre réponse: Une valeur de ignoredupscause empêche la sauvegarde des lignes correspondant à l'entrée précédente de l'historique . Il ne supprime que les lignes identiques consécutives.
AL le
10
En mettant cela, ~/.bashrcon appliquera la solution de @ alvin à différentes sessions aussi
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
Pourquoi son utilisation export HISTCONTROLet la vôtre non? Quelle est la différence? Cela fonctionne pour moi sans exportation, je suis juste curieux
felwithe
1
Bonne question! J'aimerais aussi connaître la réponse. En général, exportrend la variable disponible pour les sous-processus. stackoverflow.com/q/1158091/552621 Dans le cas HISTCONTROL, PROMPT_COMMAND, etc, ces variables sont utilisées par la coque elle - même alors peut - être les exporter (aux enfants processus) n'est pas nécessaire.
Réponses:
De la
bash
page de manuel:Alors mettez la ligne suivante dans votre
~/.bashrc
:export HISTCONTROL=ignoreboth:erasedups
la source
~/.bash_login
plupart du temps , il fonctionnerait si .bashrc est modifié , mais ce n'est pas le cas tout le temps.source ~/.bashrc && source ~/.bash_profile
Collez ceci dans votre
~/.bashrc
:Vous pourriez plutôt utiliser
ignoreboth
. Ceci est un raccourci pour à la foisignorespaces
(commandes commençant par des espaces) etignoredups
(en double).Je préfère moi-
ignoredups
même, 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 que celle-ci n'est pas enregistrée car j'ai copié accidentellement dans un espace aussi. chacun leur propre.la source
ignoredups
cause empêche la sauvegarde des lignes correspondant à l'entrée précédente de l'historique . Il ne supprime que les lignes identiques consécutives.En mettant cela,
~/.bashrc
on appliquera la solution de @ alvin à différentes sessions aussiSource: Linux: Historique Bash: conflit entre les paramètres «ignoredups» et «erasedups» avec l'historique commun des sessions.
la source
export HISTCONTROL
et la vôtre non? Quelle est la différence? Cela fonctionne pour moi sans exportation, je suis juste curieuxexport
rend la variable disponible pour les sous-processus. stackoverflow.com/q/1158091/552621 Dans le casHISTCONTROL
,PROMPT_COMMAND
, etc, ces variables sont utilisées par la coque elle - même alors peut - être les exporter (aux enfants processus) n'est pas nécessaire.la source
Ajoutez ce qui suit à votre
~/.bashrc
:Pour ce faire, vous pouvez utiliser cette commande:
la source
Enregistrer uniformément chaque nouvelle commande est délicat. Tout d'abord, vous devez ajouter
~/.profile
ou similaire:Ensuite, vous devez ajouter à
~/.bash_logout
:la source