Jak działa polecenie historii?

8

Po wpisaniu dowolnego polecenia w terminalu nie pojawia się ono w moim ~/.bash_historypliku, dopóki nie zakończę sesji.

Ponadto, gdy ręcznie edytuję ~/.bash_historyplik (na przykład usuwam trzy ostatnie polecenia), po wpisaniu historynadal wyświetla polecenia, które usunąłem z ~/.bash_historypliku. Dopiero po zakończeniu sesji i ponownym zalogowaniu się znikają.

W jaki sposób mój ~/.bash_historyplik i historypolecenie są synchronizowane?

sys0dm1n
źródło
2
jest w pamięci RAM ... Gdzie jest przechowywana historia bash?
Zanna,
„Po wpisaniu dowolnego polecenia w terminalu” Właściwie to nie prawda. Domyślne umieszczenie spacji przed poleceniem nie powoduje zapisania tego polecenia.
Rinzwind,
@ Ponownie sprawdź zachowanie zapisu polecenia, nawet jeśli ma ono miejsce z przodu, można zmienić, edytując wartość zmiennej środowiskowej HISTCONTROL.
sys0dm1n
@ sys0dm1n „default”
Rinzwind,

Odpowiedzi:

10

Po otwarciu terminalu bash ładuje zawartość ~/.bash_historyi buduje historię aktywnej powłoki (w pamięci RAM), dodając do niej każde polecenie wykonane w tej powłoce - i tylko do niej, a nie do pliku.

Dopiero po zamknięciu terminalu bash jego historia jest dołączana do ~/.bash_historypliku.


Opcje history:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

Opcje ~/.bashrcpliku

Jeśli chcesz zmienić to zachowanie, aby historia tymczasowa była zapisywana ~/.bash_historybezpośrednio po wykonaniu polecenia, dodaj następujący wiersz:

PROMPT_COMMAND="history -a"

Jeśli dodatkowo chcesz, aby każdy terminal automatycznie ładował ~/.bash_historyplik po każdym wykonaniu polecenia, dodaj ten wiersz:

PROMPT_COMMAND="history -a; history -c; history -r"

Jeśli chcesz wykluczyć niektóre polecenia (np. Wszystko zaczynające się od sudoi cat) z zapisywania, dodaj ten wiersz:

HISTIGNORE="sudo*:cat*"
deser
źródło