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 HISTFILEzmienną. Więc:
unset HISTFILE
Odnosi się to również do zsh, ale nie do ksh, który zapisuje do pliku wskazywanego przez $HISTFILEczas 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ć HISTIGNOREzmienną, aby zawierała glob poleceń, których nie chcesz nagrywać. Na przykład, jeśli dodasz HISTIGNORE='ls*:cd*'do niego ~/.bashrcdowolne wystąpienie lsi cdnie 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 ignorebothspowoduje 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 trapzasygnalizować, że program terminalowy wysyła powłokę ( xtermnp. Wysyła SIGHUPnastę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 -9do czegokolwiek oprócz tragicznych sytuacji, gdy wszystko inne zawiodło.
Jestem zaskoczony, aby zobaczyć, nikt nie zaproponował history -cbezpośrednio przed exit. IINM (nie jestem ekspertem), który da sobie radę.
history -rponownie 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 15000zresetować rozmiar bufora przewijania.
screen(1)?
scrollback=0samo.
Ctrl+a Hani Ctrl+a :clearnie 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 Hlub 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 :scrollbacknastę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 HISTFILEnastępnym razem się logować? (po prostu powiedz, czy jest to poprawne czy niepoprawne)