Aby nie zapisywać ani jednego polecenia w historii, po prostu poprzedz go spacją (oznaczoną ␣
tutaj):
$ 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
To zachowanie jest ustawione w twoim ~/.bashrc
pliku, a mianowicie w tym wierszu:
HISTCONTROL=ignoreboth
man bash
mówi:
HISTCONTROL Rozdzielona
dwukropkami lista wartości kontrolujących sposób zapisywania poleceń na liście historii. Jeśli lista wartości zawiera
ignorowanie , linie zaczynające się od spacji nie są zapisywane na liście historii . Wartość zignorowanych powoduje, że wiersze pasujące do poprzedniego wpisu historii nie są zapisywane. Wartość
ignoreboth jest skrótem ignorespace i ignoredups .
ignoredups
przy okazji jest powodem, dla którego history | tail -n2
pojawia się tylko raz w historii w powyższym teście.
Historia terminala jest zapisywana w pamięci RAM i opróżniana na twój, ~/.bash_history
gdy tylko go zamkniesz. Jeśli chcesz usunąć konkretny wpis ze swojego konta, ~/.bash_history
możesz to zrobić za pomocą 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
W ostatnim zmieniłem domyślny ogranicznik /
na, _
ponieważ jest on używany w wyszukiwanym haśle, w rzeczywistości jest to równe sed -i '/\/path\//d' .bash_history
. Jeśli polecenie wyświetla tylko linie, które chcesz usunąć, dodaj -i
opcję i zmień !d
na, d
aby wykonać usuwanie:
# 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