Um einen einzelnen Befehl in Ihrem Verlauf nicht zu speichern, müssen Sie ihm lediglich ein Leerzeichen voranstellen (hier markiert ␣
):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
Dieses Verhalten wird in Ihrer ~/.bashrc
Datei festgelegt, und zwar in der folgenden Zeile:
HISTCONTROL=ignoreboth
man bash
sagt:
HISTCONTROL
Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle in der Verlaufsliste gespeichert werden. Wenn die
Werteliste Unbeachtung enthält , werden Zeilen, die mit einem Leerzeichen beginnen, nicht in der Verlaufsliste gespeichert . Ein Wert von ignoredups bewirkt, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden. Ein Wert von
ignoreboth ist eine Abkürzung für ignorespace und ignoredups .
ignoredups
übrigens ist der grund warum history | tail -n2
im obigen test nur einmal in der geschichte auftaucht.
Der Verlauf eines Terminals wird im RAM gespeichert und nach dem ~/.bash_history
Schließen des Terminals an Ihren Computer gesendet. Wenn Sie einen bestimmten Eintrag aus Ihrem löschen möchten, können ~/.bash_history
Sie dies tun mit sed
:
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
In der letzten habe ich das Standardtrennzeichen /
in geändert , _
da es im Suchbegriff verwendet wird. Tatsächlich ist dies gleich sed -i '/\/path\//d' .bash_history
. Wenn der Befehl nur die zu löschenden Zeilen ausgibt, fügen Sie die -i
Option hinzu und ändern Sie !d
sie d
, um den Löschvorgang durchzuführen:
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere