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.


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.


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.


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 :-)


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.