Question

J'écris mon PROMPT_COMMAND="history -a;$PROMPT_COMMAND" mais je reçois encore des doublons de différentes sessions de terminal. Il semble que je vais quand même obtenir des doublons mais je reçois moins en utilisant la commande PROMPT_COMMAND="history -w;$PROMPT_COMMAND".

Je sais que je peux faire la history -a;history -c; history -r, mais je ne veux pas tous synchronisés. Je veux seulement que cela se produise quand je l'appelle -n d'histoire. Je suis essentiellement à l'aide soit -a histoire ou -w d'histoire, mais je ne peux pas sembler trouver la différence entre les deux. Lequel serait préférable d'avoir à éviter autant que possible les doublons.

Était-ce utile?

La solution

Vous avez dit deux questions:

Quelle est la différence entre history -a et history -w?

history -a sera append votre histoire en cours de session au contenu du fichier historique.

history -w sera REMPLACER le contenu du fichier historique avec votre histoire en cours de session.

où l'on évite plus de doublons?

Théoriquement non plus. Ni -a ni contrôles -w pour les doublons. Pratiquement -w évite le plus de doublons, car il remplace le contenu du fichier d'historique. Toutes les entrées en double potentiel dans le fichier sont éliminés, ainsi que toute autre chose dans le fichier.

En savoir plus sur la commande history dans le manuel bash.


Un peu plus d'informations sur d'autres possibilités de tuer les doublons:

La HISTCONTROL=ignoredups spéciale variable bash ne nous aide pas beaucoup ici parce que seuls les doublons Elimine comme ils sont entrés dans la coquille en cours d'exécution. Il ne fait rien pour éviter les doublons existants dans l'histoire en cours ou dans le fichier historique. De plus ne tient pas compte ignoredups que des commandes qui est une copie de la commande précédente, pas si elle est une copie d'une commande précédemment dans l'histoire.

Malheureusement, pas même le plus prometteur HISTCONTROL=erasedups aide beaucoup ici. erasedups efface toute entrée d'historique correspondant à la commande actuellement saisie. Malheureusement, il ne le fait que dans l'histoire de la session en cours. Il ne recherche pas de doublons dans le fichier historique. Il empêchera également pas de doublons d'entrer dans votre historique de la session lors de l'utilisation history -n.

En savoir plus sur le HISTCONTROL spéciale variables le manuel bash.

Autres conseils

vous pouvez éviter les doublons en utilisant cette

export HISTCONTROL=ignoredups

Vous pouvez regarder cela pour plus d'informations:

http://stefaanlippens.net/bashduplicates

Utilisation PROMPT_COMMAND variables BASH avec history et en utilisant des commandes sort et uniq:

$> export PROMPT_COMMAND="history -a && history -c && sort ~/.bash_history | uniq > ~/.bash_history_new && rm ~/.bash_history && mv ~/.bash_history_new ~/.bash_history && history -r"

Avec cela, vous ne pas besoin de définir shopt -s histappend et faire export HISTCONTROL=erasedups.

Cela permet de garder votre histoire et le fichier historique sans doublons sur la volée. Vous pouvez jouer avec le maintien de l'histoire dans les commandes de commande a été tapé. (Indice: l'utilisation des numéros de ligne dans l'histoire, sorte de la position de début de ligne spécifique et après la suppression des doublons ne sorte de nouveau avec les numéros de ligne)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top