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 HISTSIZEjest to liczba poleceń zapisanych podczas bieżącej sesji i HISTFILESIZEliczba 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ż HISTSIZEjest ustawiony na 10, historyzwraca listę 10 poleceń. Jeśli jednak wylogujesz się, a następnie zalogujesz ponownie, historyzwróci tylko 5 poleceń, ponieważ HISTFILESIZEjest ustawiony na 5. Jest tak, ponieważ po zakończeniu sesji HISTFILESIZEwiersze historii są zapisywane w pliku historii ( ~/.bash_historydomyślnie, ale kontrolowane przez HISTFILE). Innymi słowy, polecenia są dodawane, HISTFILEaż osiągnie $HISTFILESIZElinię, 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_profilejeśli ten plik istnieje). Nie ustawiaj ich w ~/.bashrcpierwszej 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, dflub dubyłoby zignorowane i nie zapisane w twojej historii.
HISTCONTROL: Ten pozwala ci wybrać sposób działania historii. Osobiście ustawiłem to, HISTCONTROL=ignoredupsco powoduje, że zapisuje zduplikowane polecenia tylko raz. Inne opcje to ignorespacezignorowanie poleceń rozpoczynających się od białych znaków, erasedupsco powoduje usunięcie wszystkich poprzednich wierszy pasujących do bieżącego wiersza z listy historii przed zapisaniem tego wiersza. ignorebothjest skrótem dla ignorowania i ignorowania.
HISTTIMEFORMAT: Pozwala ustawić format czasu pliku historii. Zobacz odpowiedź Pandya lub przeczytaj, man bashaby uzyskać szczegółowe informacje.
W celu dalszego dostrojenia masz:
Opcja histappendbash. Można to ustawić, uruchamiając shopt -s histappendlub 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).
historyKomenda 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.