2012-01-27 20 views
48

Zauważam, że po otwarciu .bash_history, że zawiera ona tylko wpisy z poprzedniej sesji, wydaje się, że bieżąca sesja jest dołączana tylko przy wyjściu. Czy istnieje sposób, aby zapobiec zapisaniu bieżącej sesji? Nawet awaria bash jest opcją, jeśli ktoś wie, jak to zrobić. Zauważyłem, że mogę kill -9 proces, ale jeśli jest lepszy sposób, chciałbym wiedzieć.Nie zapisuj bieżącej sesji bash do historii

+2

Hakowskim sposobem na osiągnięcie tego celu jest użycie 'kill -9 $$'. Wysyłając terminal SIGKILL, nie ma szansy na zapisanie do pliku historii. – jordanm

Odpowiedz

55

Być może bardziej elegancki niż upaść bash byłoby użyć komendy history -c wyczyścić historię bieżącej sesji. Wtedy nie ma nic do zapisania (nawet wyciera się z historii).

+3

To również nukeuje zawartość pliku histfile. –

+1

To nie dla mnie. Może to się zmieniło w pewnym momencie? Używam bash 4.2. – FatalError

+13

tak, to nukeuje historię dla 3.2 i nie dla 4.2 –

53

rozbroić $HISTFILE zmienna

$ unset HISTFILE 

Jeśli HISTFILE jest wyłączony, lub jeśli plik jest niezapisywalny historia, historia nie jest zapisywana.
http://www.faqs.org/docs/bashman/bashref_106.html

+0

Dzięki, jest to dobre dla wersji Bash, które nuke całej historii na-c. – dotancohen

+0

nie działa dla mnie – RSFalcon7

+0

Co to jest korzyść w porównaniu z 'historia -r', ponieważ z tym stracisz wszystko, co zrobiłeś od czasu zalogowania. Ale z tym stracisz to i wszystko, czym jesteś _going_ do zrobienia w sesji. – Pylinux

5

To powinno zrobić:

HISTFILE= 

rozbroić HISTFILE.

+0

Dziękuję, to działa i wykorzystam je dla starszych Bashów na niektórych przestarzałych serwerach. – dotancohen

+0

nie działa dla mnie – RSFalcon7

+0

Można też spróbować: rozbrojony HISTFILE pewnością wystarcza jeśli nie chcesz nic z tej sesji się w historii. W przeciwnym razie zobacz mój komentarz powyżej o HISTCONTROL. – th3penguinwhisperer

10

Istnieje inna opcja, podobna do history -c, ale to nie powoduje wyczyszczenia niczego wcześniejszego niż bieżąca sesja.

Jest history -r, która ładuje się dzieje z HISTFILE, jak gdyby po prostu zalogowany.

Nie wiem, czy to działa, czy jest dostępny w każdej wersji bash poprzedniego do 4.3.11, ale choć byłoby użyteczne włączenie go do listy.

Oto przykład pokazujący różnicę między tym poleceniem i jeden -c:

[email protected]:~$ # I Just logged in 
[email protected]:~$ history | tail -n6 # this shows commands from the previous session, which ends at item 4682 as well as from the current one 
4679 2014-08-23 17:15:29 # Previous session 
4680 2014-08-23 17:15:33 # Still the previous session 
4681 2014-08-23 17:15:37 # note the datetime 
4682 2014-08-23 17:15:44 exit 
4683 2014-08-23 17:17:25 # I Just logged in 
4684 2014-08-23 17:19:54 history | tail -n6 # this shows the last command, and the ones from the previous session 
[email protected]:~$ # This is a secret command, so I need to remove the traces of this session 
[email protected]:~$ history -r 
[email protected]:~$ history | tail -n5 # Note that I went back to item 4682, and there are no traces of history -r command 
6242 2014-08-23 17:15:29 # Previous session 
6243 2014-08-23 17:15:33 # Still the previous session 
6244 2014-08-23 17:15:37 # note the datetime 
6245 2014-08-23 17:15:44 exit 
6246 2014-08-23 17:22:26 history | tail -n5 # Note that I went back to item 4682, and there are no traces of history -r command 
[email protected]:~$ history -C# instead if I issue history -c 
[email protected]:~$ history # everything disappears 
5248 2014-08-23 17:23:13 history # everything disappears 
[email protected]:~$ 
+0

W bashu 4.3.39, 'history -r' Dołącza zawartość pliku historii do bieżącej listy historii. Nie mogę powiedzieć, czy to właśnie robił, kiedy opublikowałeś swoją odpowiedź ... Liczby historii przeskakują dużo między twoimi poleceniami, ale nie podwajaj ich. – user1902689

+0

Jesteś pewien, że dołącza je? W bashu 4.3.11 liczby przeskakują do przodu, ponieważ licznik nie jest resetowany, ale w rzeczywistości nie dołącza zawartości do oryginalnych. Rzeczywiście, jeśli się wylogujesz i zalogujesz, numery powrócą do pierwotnego stanu. –

4

następujące prace dla mnie.

export HISTFILE=/dev/null 

Należy pamiętać, że ma przed sobą spację. Większość nowoczesnych dystrybucji nie dodawałaby poleceń wprowadzonych po spacji do bashowania historii. To uniemożliwi pojawienie się tej linii w twojej historii.

7

Wiem, że to stary wątek. Po prostu chciał dodać to do wykonania:

nie Jeśli chcesz tylko konkretne polecenia, aby być zapisanym sprawdzenia czy zmienna HISTCONTROL jest ustawiona: HISTCONTROL = ignoreboth lub HISTCONTROL = ignorespace

Każde polecenie, które zaczyna się od natarcia przestrzeń nie zostanie umieszczona w historii.

Tylko moje 2 centy.

+0

Bardzo, dziękuję pingwinku! – dotancohen

+0

To miło! –

Powiązane problemy