Question Comment éviter les doublons 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.


88
2017-12-02 20:05


origine


J'ai créé une question connexe: askubuntu.com/questions/205520/…. Les points dans l’historique sont utiles pour voir le contexte d’une commande. Ce que vous voulez omettre parfois des dups lorsque vous imprimez l’histoire. - justingordon


Réponses:


Du bash page de manuel:

HISTCONTROL

Une liste de valeurs séparées par des deux-points contrôlant comment les commandes sont enregistrées     la liste de l'historique. Si la liste de valeurs comprend ignorespace, lignes     qui commencent par un caractère d'espacement ne sont pas enregistrés dans la liste d'historique. UNE     valeur de ignoredups provoque des lignes correspondant à l'entrée de l'historique précédent     ne pas être sauvé. Une valeur de ignoreboth est sténographie pour ignorespace  et      ignoredups. Une valeur de erasedups provoque toutes les lignes précédentes correspondant à la     ligne en cours à supprimer de l'historique avant que cette ligne ne soit     enregistré. Toute valeur ne figurant pas dans la liste ci-dessus est ignorée. Si HISTCONTROL est     désélectionner, ou n'inclut pas de valeur valide, toutes les lignes lues par le shell     l'analyseur est enregistré dans la liste d'historique, sous réserve de la valeur de HISTIGNORE.     Les deuxième et suivante lignes d'une commande composée multiligne ne sont pas     testé, et sont ajoutés à l'historique indépendamment de la valeur de HISTCONTROL.

Alors mettez la ligne suivante dans votre ~/.bashrc:

export HISTCONTROL=ignoreboth:erasedups


99
2017-12-02 20:09



Voulez-vous que j'ajoute HISTCONTROL = ignoreboth dans le bas de ~ / .bashrc? - karthick87
@ karthick Peu importe où vous le mettez, le fond est bien. - Isaiah
Sur mon installation d'Ubuntu 12.04, j'ai dû apporter cette modification dans ~/.bash_login La plupart du temps, cela fonctionnerait si .bashrc était modifié mais ce n'est pas le cas tout le temps. - ck-
N'oubliez pas de les exécuter après la mise à jour de vos fichiers de profil / rc bash - source ~/.bashrc && source ~/.bash_profile - Eric Kigathi


Collez ceci dans votre ~/.bashrc:

export HISTCONTROL=ignoredups

Vous pourriez plutôt utiliser ignoreboth. Ce raccourci pour les deux ignorespaces (commandes commençant par des espaces) et ignoredups (doublons).

je préfère ignoredups comme je trouve le comportement par défaut d'ignorer les commandes avec des espaces à l'avant assez ennuyeux lorsque je copie une commande sur un site Web et qu'il n'est pas enregistré parce que j'ai accidentellement copié dans un espace .... Mais à chacun ses posséder.


20
2017-12-02 20:10



Il existe toujours des doublons .. Quel peut être le problème?imgur.com/fXeLQ.png - karthick87
@ karthick87 a cité une autre réponse: Une valeur de ignoredups les lignes correspondant à l'historique précédent ne sont pas enregistrées. Il ne supprime que les lignes consécutives identiques. - A.L


Mettre ça dans ~/.bashrc va appliquer la solution @ alvin à travers différentes sessions comme wlell

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

La source: Linux: historique des bashs: mise en conflit des paramètres «ignoré» et «effacé» avec l'historique commun des sessions


7
2017-08-31 15:44



Pourquoi son utilisation export HISTCONTROL et le tien ne le fait pas? Quelle est la différence? Ça marche pour moi sans export, je suis juste curieux - felwithe
Bonne question! Je voudrais aussi connaître la réponse. En général export rend la variable disponible pour les sous-processus. stackoverflow.com/q/1158091/552621 Dans le cas de HISTCONTROL, PROMPT_COMMAND, etc, ces variables sont utilisées par le shell lui-même, alors peut-être que les exporter (vers des processus enfants) n'est pas nécessaire. - Nour Chawich


export HISTCONTROL=erasedups

4
2017-12-03 02:29





Ajoutez ce qui suit à votre ~/.bashrc:

export HISTCONTROL=ignoredups

Pour ce faire, vous pouvez utiliser cette commande:

nano ~/.bashrc

3
2017-12-02 20:11





Enregistrer de manière unique chaque nouvelle commande est délicat. Tout d'abord, vous devez ajouter à ~/.profile ou similaire:

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

Ensuite, vous devez ajouter à ~/.bash_logout:

history -a
history -w

0
2018-02-04 18:42