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?


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' 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.