Czasami, gdy uruchamiam takie polecenia rm -rf XYZ
, nie chcę, aby było to rejestrowane w historii Bash, ponieważ mogę przypadkowo uruchomić to samo polecenie ponownie przez reverse-i-search
. Czy istnieje dobry sposób, aby temu zapobiec?
96
bash
może być używany do pisania skryptów powłoki (a więc programowania), ten konkretny aspekt nie ma absolutnie nic wspólnego z programowaniem (historia jest tylko rzeczą interaktywną). Głosowanie za zamknięciem.Odpowiedzi:
Jeśli ustawisz
HISTCONTROL
zmienną środowiskową naignoreboth
(która jest zwykle ustawiona domyślnie), polecenia z wiodącym znakiem spacji nie będą przechowywane w historii (tak samo jak duplikaty).Na przykład:
$ HISTCONTROL=ignoreboth $ echo test1 $ echo test2 $ history | tail -n2 1015 echo test1 1016 history | tail -n2
Oto, co
man bash
mówi:Zobacz też:
źródło
W swoim .bashrc / .bash_profile / gdziekolwiek chcesz, umieść
export HISTIGNORE=' *'
. Następnie po prostu rozpocznij dowolne polecenie, które chcesz zignorować, jednym spacją.$ ls # goes in history $ ls # does not
źródło
HISTCONTROL
zmiennej środowiskowej, która niekoniecznie musi byćignorespace
ustawiona.HISTCONTROL
zawieraignorespace
, w rzeczywistości niepotrzebne jest tylko umieszczanie „*” wHISTIGNORE
. Obie działają niezależnie.Jeszcze lepsze wykorzystanie
HISTIGNORE
. Umożliwia to określenie zestawu wzorców, które mają być ignorowane (na przykładrm
). To jest lepsze (myślę) niż tylko przepuszczanie całej historii/dev/null
.źródło
kill -9 $$
Wiem, że to nie jest tak najlepsze jak poprzednie odpowiedzi, ale to zabije bieżącą powłokę Bash bez zapisywania czegokolwiek, przydatne, gdy HISTCONTROL nie jest ustawiony domyślnie, zapomniałeś go ustawić lub czysty i prosty zapomniałeś wstawić wiodącą spację i właśnie wpisałeś jakieś hasła i nie chcesz, aby pozostały na stałe w historii.
Jest to szybki sposób, a coś takiego jak usunięcie pliku historii nie jest tak dobre, ponieważ musisz to zrobić poza powłoką do zapisywania historii (zaloguj się jako inny użytkownik i użyj su / sudo, tworząc zadanie w tle itp.)
źródło
Możesz zrobić jedną z dwóch rzeczy:
export HISTFILE=/dev/null
Lub rozpocznij polecenie spacją.
źródło
ignorespace
ich domyślnie.HISTFILE
ten sposób zapobiega przechowywania żadnej historii, a nie zapobiec polecenie dodawanych do historii w pamięci.Lub
unset HISTFILE
(podobnie jak w poprzedniej odpowiedzi, tylko krócej: export HISTFILE = / dev / null)
źródło
Podczas uruchamiania powłoki jawnie usuwam historię z wpisów, których nie chcę tam być. Na przykład nie chcę żadnego
rm -rf
w historii (to trauma po usunięciu katalogu pełnego wyników przetwarzanych przez noc, tylko jednymArrow-Up
+Enter
:)Umieściłem następujący fragment w moim pliku init (działa z
.zshrc
, powinien również działać.bashrc
)# ... HISTFILE=~/.zshhistory # ... # remove dangerous entries from the shell history temp_histfile="/tmp/$$.temp_histfile" grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile mv $temp_histfile $HISTFILE
źródło