Nieraz przypadkowo uruchomiłem wiele poleceń i zepsułem swoją historię bash. Jak zamknąć terminal bez zapisywania historii bash? Używam Fedory.
Nieraz przypadkowo uruchomiłem wiele poleceń i zepsułem swoją historię bash. Jak zamknąć terminal bez zapisywania historii bash? Używam Fedory.
Odpowiedzi:
Historia twojej powłoki jest zapisywana w pliku wskazanym przez HISTFILE
zmienną. Więc:
unset HISTFILE
Odnosi się to również do zsh, ale nie do ksh, który zapisuje do pliku wskazywanego przez $HISTFILE
czas uruchomienia powłoki (i odwrotnie, decydujesz się zapisać swoją historię w ksh po uruchomieniu powłoki).
Krótka odpowiedź:
Wpisz to w odpowiedzi na monit:
$ kill -9 $$
To zabije twoją powłokę od razu, bez możliwości wykonania przez nią jakiejkolwiek czynności , takiej jak przechwytywanie sygnału, zapisywanie historii, wykonywanie ~/.bash_logout
, ostrzeganie o zatrzymanych zadaniach lub jakiekolwiek inne dobre rzeczy.
Długa odpowiedź:
Uwaga: te opcje nie wykluczają się wzajemnie; można z nich korzystać jednocześnie.
Opcja 1:
Jeśli jesteś perfekcjonistą, jeśli chodzi o zaśmiecanie pliku historii, możesz zmodyfikować HISTIGNORE
zmienną, aby zawierała glob poleceń, których nie chcesz nagrywać. Na przykład, jeśli dodasz HISTIGNORE='ls*:cd*'
do niego ~/.bashrc
dowolne wystąpienie ls
i cd
nie zostanie wstawione do pliku historii.
Opcja 2:
Jeśli chcesz kontrolować na zasadzie polecenia po poleceniu, które polecenia zostaną pominięte w historii, możesz ustawić, HISTCONTROL='ignorespace'
które będą pomijać wszystkie wiersze poleceń rozpoczynające się spacją. Użycie ignoreboth
spowoduje również pominięcie powtarzających się wierszy. Następnie naciśnięcie klawisza spacji przed wprowadzeniem polecenia spowoduje, że nie pojawi się on w pliku historii.
Opcja 3:
Jeśli chcesz, aby po zamknięciu terminala powłoka natychmiast się kończy, możesz trap
zasygnalizować, że program terminalowy wysyła powłokę ( xterm
np. Wysyła SIGHUP
następnie czeka na zakończenie powłoki) i robi wyjście bez zapisywania historii, gdy odbiera ten sygnał. Dodaj to do ~/.bashrc
:
# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
kill -9
do czegokolwiek oprócz tragicznych sytuacji, gdy wszystko inne zawiodło.
Jestem zaskoczony, aby zobaczyć, nikt nie zaproponował history -c
bezpośrednio przed exit
. IINM (nie jestem ekspertem), który da sobie radę.
history -r
ponownie przeczyta plik historii, więc zapisywanie stanie się niemożliwe.
Istnieją dwie zmienne środowiskowe, których bash używa do określenia pliku historii i liczby wierszy, które należy do niego zapisać po wyjściu z powłoki.
Możesz wyrzucić historię sesji za pomocą dowolnej z nich (ustaw w trakcie sesji, którą chcesz pominąć w pliku historii):
HISTFILE=/dev/null
lub
HISTSIZE=0
Każda z nich działa dobrze w Bash na Fedorze
Nie jestem pewien, dlaczego tak bardzo zależy ci na historii poleceń. Jeśli często potrzebujesz pewnych poleceń, możesz mieć więcej zabawy, jeśli zdefiniujesz dla nich aliasy, dzięki czemu możesz je odzyskać za pomocą dwóch naciśnięć klawiszy, zamiast szukać ich w historii.
Eli już dał ci poprawną odpowiedź na Bash, którą należy ustawić HISTSIZE=0
.
Chciałbym tylko dodać metodę, aby to zrobić dla ekranu GNU . Naciśnij Ctrl+A
(sekwencja ucieczki ekranu), a następnie :scrollback 0
. Spowoduje to usunięcie historii przewijania. Teraz możesz od razu :scrollback 15000
zresetować rozmiar bufora przewijania.
screen(1)
?
scrollback=0
samo.
Ctrl+a H
ani Ctrl+a :clear
nie usunie historii. Trzeba Ctrl+a :scrollback 0
. Możesz to przetestować sam. Rozpocznij nową sesję ekranu. Teraz zrób cat /etc/passwd
. Teraz wykonaj dowolną z powyższych czynności - Ctrl+a H
lub Ctrl+a :clear
. Teraz spróbuj skopiować z bufora ekranu, przekazując Ctrl+a [
następnie strzałkę w górę, aby przejść w górę i zobaczyć, jak daleko można się posunąć do skopiowania. Jeśli zrobiłeś a Ctrl+a :scrollback
następnie a clear
, posunąłbyś się tylko tak daleko, jak możesz zobaczyć w bieżącym oknie, ponieważ nie będzie żadnego bufora przewijania.
set HISTFILE
następnym razem się logować? (po prostu powiedz, czy jest to poprawne czy niepoprawne)