histoire -a vs -w histoire BASH
-
27-10-2019 - |
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.
La solution
Vous avez dit deux questions:
Quelle est la différence entre
history -a
ethistory -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:
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)