Istnieją dwie zmienne, które kontrolują rozmiar historii:
HISTFILESIZE Maksymalna liczba wierszy zawartych w pliku historii. Gdy tej zmiennej zostanie przypisana wartość, plik historii jest w razie potrzeby obcinany, aby zawierał nie więcej niż tę liczbę wierszy, usuwając najstarsze wpisy. Plik historii jest również przycinany do tego rozmiaru po zapisaniu go po wyjściu powłoki. Jeśli wartość wynosi 0, plik historii jest obcinany do zera. Wartości nienumeryczne i wartości liczbowe mniejsze od zera hamują obcinanie. Powłoka ustawia wartość domyślną na wartość HISTSIZE po odczytaniu plików startowych.
i
HISTSIZE Liczba poleceń do zapamiętania w historii poleceń (patrz HISTORIA poniżej). Jeśli wartość wynosi 0, polecenia nie są zapisywane na liście historii. Wartości liczbowe mniejsze od zera powodują zapisanie każdego polecenia na liście historii (nie ma ograniczenia). Powłoka ustawia wartość domyślną na 500 po odczytaniu plików startowych.
Te dwie zmienne pozwalają kontrolować zachowanie historii. Zasadniczo HISTSIZE
jest to liczba poleceń zapisanych podczas bieżącej sesji i HISTFILESIZE
liczba poleceń, które zostaną zapamiętane między sesjami. Na przykład:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
W powyższym przykładzie, ponieważ HISTSIZE
jest ustawiony na 10, history
zwraca listę 10 poleceń. Jeśli jednak wylogujesz się, a następnie zalogujesz ponownie, history
zwróci tylko 5 poleceń, ponieważ HISTFILESIZE
jest ustawiony na 5. Jest tak, ponieważ po zakończeniu sesji HISTFILESIZE
wiersze historii są zapisywane w pliku historii ( ~/.bash_history
domyślnie, ale kontrolowane przez HISTFILE
). Innymi słowy, polecenia są dodawane, HISTFILE
aż osiągnie $HISTFILESIZE
linię, w którym to punkcie każda kolejna dodana linia oznacza, że pierwsze polecenie pliku zostanie usunięte.
Możesz ustawić wartości tych zmiennych w swoim ~/.profile
(lub ~/.bash_profile
jeśli ten plik istnieje). Nie ustawiaj ich w ~/.bashrc
pierwszej kolejności, ponieważ nie mają tam ustawionej działalności, a po drugie, ponieważ spowodowałoby to inne zachowanie się przy logowaniu niż w powłokach niezalogowanych, co może prowadzić do innych problemów .
Inne przydatne zmienne, które pozwalają precyzyjnie dostroić zachowanie twojej historii to:
HISTIGNORE
: Pozwala to zignorować niektóre popularne polecenia, które rzadko są interesujące. Na przykład możesz ustawić:
export HISTIGNORE="pwd:df:du"
To spowodowałoby, że każde polecenie zaczynające się od pwd
, df
lub du
byłoby zignorowane i nie zapisane w twojej historii.
HISTCONTROL
: Ten pozwala ci wybrać sposób działania historii. Osobiście ustawiłem to, HISTCONTROL=ignoredups
co powoduje, że zapisuje zduplikowane polecenia tylko raz. Inne opcje to ignorespace
zignorowanie poleceń rozpoczynających się od białych znaków, erasedups
co powoduje usunięcie wszystkich poprzednich wierszy pasujących do bieżącego wiersza z listy historii przed zapisaniem tego wiersza. ignoreboth
jest skrótem dla ignorowania i ignorowania.
HISTTIMEFORMAT
: Pozwala ustawić format czasu pliku historii. Zobacz odpowiedź Pandya lub przeczytaj, man bash
aby uzyskać szczegółowe informacje.
W celu dalszego dostrojenia masz:
Opcja histappend
bash. Można to ustawić, uruchamiając shopt -s histappend
lub dodając to polecenie do swojego ~/.bashrc
. Jeśli ta opcja jest ustawiona
lista historii jest dołączana do pliku nazwanego wartością zmiennej HISTFILE po wyjściu powłoki, zamiast nadpisywania pliku.
Jest to bardzo przydatne, ponieważ pozwala łączyć historie różnych sesji (na przykład różne terminale).
history
Komenda ma dwa użytecznych opcji:
Możesz na przykład dodać te dwie komendy do swojej PROMPT_COMMAND
(która jest wykonywana za każdym razem, gdy powłoka wyświetla monit, więc za każdym razem, gdy uruchamiasz nową powłokę i po każdej komendzie w niej uruchomionej):
export PROMPT_COMMAND='history -a;history -r;'
W połączeniu zapewniają one, że każdy otwarty terminal natychmiast zaimportuje historię innych sesji powłoki. Rezultatem jest wspólna historia dla wszystkich terminali / sesji powłoki.