Nieraz przypadkowo uruchomiłem wiele poleceń i zepsułem swoją historię bash. Jak zamknąć terminal bez zapisywania historii bash? Używam Fedory.
bash
command-history
Michał Mrożek
źródło
źródło
set HISTFILE
następnym razem się logować? (po prostu powiedz, czy jest to poprawne czy niepoprawne)Krótka odpowiedź:
Wpisz to w odpowiedzi na monit:
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 dodaszHISTIGNORE='ls*:cd*'
do niego~/.bashrc
dowolne wystąpieniels
icd
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życieignoreboth
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łaSIGHUP
następnie czeka na zakończenie powłoki) i robi wyjście bez zapisywania historii, gdy odbiera ten sygnał. Dodaj to do~/.bashrc
:źródło
kill -9
do czegokolwiek oprócz tragicznych sytuacji, gdy wszystko inne zawiodło.Jestem zaskoczony, aby zobaczyć, nikt nie zaproponował
history -c
bezpośrednio przedexit
. IINM (nie jestem ekspertem), który da sobie radę.źródło
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):
lub
Każda z nich działa dobrze w Bash na Fedorze
źródło
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.
źródło
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.źródło
screen(1)
?scrollback=0
samo.Ctrl+a H
aniCtrl+a :clear
nie usunie historii. TrzebaCtrl+a :scrollback 0
. Możesz to przetestować sam. Rozpocznij nową sesję ekranu. Teraz zróbcat /etc/passwd
. Teraz wykonaj dowolną z powyższych czynności -Ctrl+a H
lubCtrl+a :clear
. Teraz spróbuj skopiować z bufora ekranu, przekazującCtrl+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ś aCtrl+a :scrollback
następnie aclear
, posunąłbyś się tylko tak daleko, jak możesz zobaczyć w bieżącym oknie, ponieważ nie będzie żadnego bufora przewijania.