Exclure certaines commandes d'être stockées dans l'historique bash


31

Est - il possible d'exclure des commandes comme rm -rf, svn revertd'être stockés dans l' histoire se bash? En fait, par erreur, je les ai émis un certain nombre de fois, même si je n'ai pas l'intention de le faire, simplement parce que je fais les choses rapidement et que c'est arrivé. Par conséquent, je perds beaucoup de travail jusqu'à présent.


3
Vous pourriez être intéressé par serverfault.com/questions/48769/…
Luc M

Réponses:


53

Vous voudrez peut-être $HISTIGNORE: "Une liste de modèles séparés par deux-points pour décider quelles lignes de commande doivent être enregistrées dans la liste d'historique." Cette ligne dans votre ~ / .bashrc devrait faire le travail:

HISTIGNORE='rm *:svn revert*'

Vous pouvez également ajouter un espace au début d'une commande pour l'exclure de l'historique. Cela fonctionne tant que $HISTCONTROLcontient ignorespaceou ignoreboth, ce qui est par défaut sur n'importe quelle distribution que j'ai utilisée.


4
l'espace est comme je l'ai toujours fait.
Rob

J'avais l'habitude d'entrer accidentellement supplémentaires y, après tout cp(aliasé cp -i) passer. Donc , j'Aliased yque alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Mais HISTIGNOREest meilleure méthode qu'il regarde. :) Merci.
anishsane

2
Juste pour être plus explicite: vous pouvez ajouter export HISTCONTROL="ignorespace"à votre ~/.bashrcpour ignorer les commandes qui commencent par des espaces.
Aidan Feldman

@AidanFeldman pas par défaut sur macOS
akauppi

REMARQUE: l'espace doit être inclus lorsque nous tapons dans la ligne de commande et non dans HISTIGNORE.
Gayan Weerakutti

6

Bien que cela diffère légèrement de la question d'OP, lorsque je ne veux pas intentionnellement qu'une commande soit stockée dans l'historique bash, je les préfixe avec un espace. Fonctionne dans Ubuntu et ses variantes, je ne sais pas si cela fonctionne sur tous les systèmes.


6
Cela dépend $HISTCONTROL(voir ma réponse).
l0b0

@ l0b0 à droite, merci de l'avoir signalé.
k4rtik

1

Je tue généralement mon instance bash quand j'ai fait des choses que je ne veux pas dans l'histoire.

kill -9 $$

$$ représente le processus actuel - bash lorsque vous l'exécutez à partir du shell. Vous pouvez utiliser $ BASHPID, mais c'est plus en tapant :-)


2
Certains paramètres Bash (comme celui-ci ) enregistreront l'historique après chaque commande, et dans ce cas, cela ne fonctionnera pas.
l0b0

1
J'avais l'habitude de faire ça. mais le réglage HISTFILE=/dev/nullest une meilleure option.
anishsane

HISTFILE=fonctionne simplement dans bash et ksh.
kubanczyk

ouunset HISTFILE
Todd Walton
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.