Déduplication de l'historique Bash entraînant un comportement multi-shell dangereux

1

J'utilise le code suivant dans mon fichier .bash_profile pour filtrer et dédupliquer mon historique bash:

shopt -s histappend
HISTSIZE=100000
HISTFILESIZE=100000
HISTCONTROL=ignoredups:erasedups
PROMPT_COMMAND="history -a;history -c;history -r;$PROMPT_COMMAND"

Cela fonctionne à merveille, mais l'effet secondaire suivant est produit:

Disons que j'ai deux terminaux / onglets ouverts:

  • 1er onglet: dossier:, ~dernière commande exécutée: wget big_file...(ou quelque chose de long)
  • 2ème onglet: dossier: un dossier temporaire aléatoire, dernière commande exécutée: rm -rf *

Maintenant, si je passe du deuxième au premier onglet et que j'appuie sur la touche HAUT, la dernière commande sera réexécutée, comme si tout allait bien.

Vient maintenant le moment dangereux: si j'appuie à nouveau sur UP, cela s'insérera rm -rf *et si je ne le remarque pas, à l'instant même où je viens de supprimer toutes mes données.

Pouvez-vous me recommander un paramètre .bash_profile pour l'historique qui supprime la duplication / filtrage mais ne permet pas que de telles choses se produisent?

hyperknot
la source
Supprimez le PROMPT_COMMAND.
Choroba
Mais cela permettrait-il toujours de s'assurer que les lignes sont dédupliquées et que les plus récentes sont conservées au bas?
hyperknot
Les lignes seront cohérentes dans chaque terminal séparément.
Choroba
Je pense que le fait de -a est utile pour sauvegarder shell régulièrement, mais -c et -r est celui qui provoque le brassage. Ma seule question est de savoir si je devrais utiliser -a, -n ou -w.
hyperknot

Réponses:

0

Vous pouvez utiliser HISTIGNOREpour ignorer ceux que vous considérez dangereux.

HISTIGNORE='rm -rf *:dangercmd -c 2:echo and so on' 
rm-vanda
la source