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.