Ausschließen einiger Befehle vom Speichern im Bash-Verlauf

31

Gibt es eine Möglichkeit Befehle ausschließen wie rm -rf, svn revertdavon , dass in der Bash Geschichte gespeichert zu werden ? Tatsächlich habe ich sie versehentlich mehrmals ausgegeben, obwohl ich nicht die Absicht habe, dies zu tun, nur weil ich Dinge schnell tue und es passiert ist. Dadurch geht viel Arbeit verloren, die ich bisher geleistet habe.

Ravi Gupta
quelle
3
Vielleicht interessieren Sie sich für serverfault.com/questions/48769/…
Luc M

Antworten:

53

Möglicherweise möchten Sie $HISTIGNORE: "Eine durch Doppelpunkte getrennte Liste von Mustern, anhand derer entschieden wird, welche Befehlszeilen in der Verlaufsliste gespeichert werden sollen." Diese Zeile in Ihrem ~ / .bashrc sollte den Job erledigen:

HISTIGNORE='rm *:svn revert*'

Sie können auch am Anfang eines Befehls ein Leerzeichen einfügen, um ihn aus dem Verlauf auszuschließen. Dies funktioniert, solange $HISTCONTROLenthält ignorespaceoder ignoreboth, die standardmäßig auf jedem Distro ist ich benutzt habe.

l0b0
quelle
4
Raum ist, wie ich es immer getan habe.
Rob
Ich habe aus Versehen zusätzliche eingegeben y, nachdem alle cp(voreingenommen cp -i) vorbei kommen. Also habe ich yals Alias alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Aber HISTIGNOREist eine bessere Methode, wie es aussieht. :) Vielen Dank.
Anishsane
2
Um es genauer zu sagen: Sie können export HISTCONTROL="ignorespace"Ihren ~/.bashrcBefehlen hinzufügen , um Befehle zu ignorieren, die mit Leerzeichen beginnen.
Aidan Feldman
@AidanFeldman nicht standardmäßig auf MacOS
akauppi
HINWEIS: Leerzeichen sollten bei der Eingabe in der Befehlszeile und nicht in HISTIGNORE enthalten sein.
Gayan Weerakutti
6

Obwohl dies ein wenig anders ist als in der Frage von OP, möchte ich, dass ein Befehl nicht in der Bash-Historie gespeichert wird. Ich stelle ihnen jedoch ein Leerzeichen voran. Funktioniert in Ubuntu und seinen Varianten, nicht sicher, ob es auf allen Systemen funktioniert.

k4rtik
quelle
6
Kommt drauf an $HISTCONTROL(siehe meine Antwort).
10.
@ l0b0 richtig, danke für den Hinweis.
k4rtik
1

Normalerweise töte ich meine Bash-Instanz, wenn ich Dinge getan habe, die ich in der Geschichte nicht haben will.

kill -9 $$

$$ repräsentiert den aktuellen Prozess - Bash, wenn Sie ihn über die Shell ausführen. Du kannst $ BASHPID verwenden, aber das ist mehr Tipparbeit :-)

Kommandant Keen
quelle
2
Einige Bash-Einstellungen (wie diese ) speichern den Verlauf nach jedem Befehl. In diesem Fall funktioniert dies nicht.
10.
1
Früher habe ich das gemacht. Die Einstellung HISTFILE=/dev/nullist jedoch eine bessere Option.
Anishsane
HISTFILE=funktioniert einfach in bash und ksh.
Kubanczyk
oderunset HISTFILE
Todd Walton