Nie można zwiększyć długości historii powłoki bash w systemie Mac OSX

26

Ustawiłem ~ / .bash_profile jakiś czas temu, aby mieć ponad 500 linii długości, ale wydaje się, że system nie może tego złapać.

Wiesz dlaczego?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500
Biotechnologia
źródło

Odpowiedzi:

34

Musisz także ustawić HISTSIZE=10000000.

HISTFILESIZEokreśla liczbę linii do przechowywania w pliku historii, a jednocześnie HISTSIZEliczbę linii do zachowania w pamięci. Oba są domyślnie ustawione na500

Wykonaj echo $HISTFILESIZE $HISTSIZEprzed wprowadzeniem zmiany, a następnie ponownie po. Powinieneś zobaczyć 10000000 500najpierw, a 10000000 10000000potem.

Allan
źródło
16

Trzeba eksportowych HISTSIZE i HISTFILESIZEzmiennych środowiskowych w ~/.bash_profilepliku.

Dodaj następujące wiersze w swoim ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000
Petr Javorik
źródło
9

Odpowiedź:

Wszystko, co musisz zrobić, to ustawić HISTSIZEw swoim profilu bash ( ~/.bash_profile). Możesz pozostawić HISTFILESIZE nieuzbrojony . Spowoduje to skonfigurowanie zarówno historii w pamięci, jak i historii opartej na plikach.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Wyjaśnienie, dodatkowe informacje.

Problem polega na tym, że HISTFILESIZE ustawia maksymalną historię zapisaną w pliku podczas uruchamiania sesji. HISTSIZE określa, ile linii zostanie zapisanych na koniec sesji. Jeśli HISTFILESIZE jest większy niż HISTSIZE, nigdy nie zobaczysz więcej niż HISTSIZE, ponieważ plik jest zastępowany poleceniami HISTSIZE ( chyba że ustawisz dołączanie historii, ale jest to osobny temat: wyszukaj histappendw tym celu wbudowane polecenia powłoki ) .

To jest powód, dla którego nie widzisz żadnego efektu. Przy domyślnym HISTSIZE (prawdopodobnie 500) plik historii jest zawsze zastępowany najnowszymi poleceniami $ HISTSIZE. Wszystko, co jest starsze (które mogłoby potencjalnie powiększyć listę po $ HISTSIZE), jest usuwane.

W większości przypadków nie ma potrzeby ustawiania HISTFILESIZE niezależnie od HISTSIZE.

HISTSIZE określa, ile wierszy zostanie zapisanych w pliku historii. Lista poleceń jest obcinana przy wyjściu, przed zapisaniem do pliku historii, zachowując N najnowszych wierszy. Domyślnie ta lista zastępuje plik historii.

HISTFILESIZE określa, jak duży może być plik historii (w wierszach). Plik zostaje obcięty podczas uruchamiania, zachowując N najnowszych linii. Ponadto plik historii jest potencjalnie obcinany za każdym razem, gdy ustawiony jest HISTFILESIZE.

Wreszcie, chociaż wydaje się, że jest to nieudokumentowane, BASH ustawia HISTFILESIZE na podstawie HISTSIZE, jeśli HISTSIZE jest ustawiony podczas uruchamiania. Wypróbowałem to na macOS i kilku odmianach Ubuntu, a zachowanie jest spójne. Jeśli ustawisz HISTSIZE w pliku uruchomieniowym ( w żadnym wypadku nie poprzez wiersz poleceń), HISTFILESIZE zostanie ustawiony tak, aby pasował. (Spróbuj sam: ustaw HISTSIZE na jakąś arbitarnie dużą wartość w .bash_profile, wyjdź i uruchom nowy terminal, a wtedy echo $HISTSIZE $HISTFILESIZEznajdziesz je pasujące.)

W związku z tym nie ma powodu, aby dotykać HISTFILESIZE, chyba że chcesz mieć inne wartości, a przypadki użycia mające różne wartości są rzadkie (i zazwyczaj wymagają więcej ustawień dostosowywania historii, aby uzyskać coś użytecznego).

Zim
źródło
Masz rację Zim. Kod źródłowy Bash pokazuje, że po prostu ustaw HISTFILESIZE na HISTSIZE, jeśli HISTFILESIZE nie jest ustawiony. git.savannah.gnu.org/cgit/bash.git/tree/…
Robert