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.

Ravi Gupta
la source
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.

l0b0
la source
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.

k4rtik
la source
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 :-)

Commandant Keen
la source
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