Po dowiedzeniu się, co to shopt -s histappend
oznacza , wydaje się to bardzo rozsądne ustawienie i jestem zaskoczony, że nie jest to ustawienie domyślne. Dlaczego ktoś miałby wymazać swoją historię przy każdym wyjściu z powłoki?
bash
command-history
tshepang
źródło
źródło
bash
„czysty” lub dostarczony z dystrybucją.bashrc
. w przypadku tych pierwszych @Gilles jest prawdopodobnie poprawny. w tym drugim sensie domyślnie-s histappend
jest stosowany np. w Debianie od 2008: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459Odpowiedzi:
Cóż, gdy
histappend
nie jest ustawione, nie oznacza to, że historia jest czyszczona przy każdym wyjściu z powłoki. Bezhistappend
bash odczytuje plik histogramu przy uruchamianiu do pamięci - podczas operacji dodawane są nowe wpisy - a przy wyjściu z powłoki ostatnie wiersze HISTSIZE są zapisywane do pliku historii bez dołączania, tj. Zastępując poprzednią zawartość.Na przykład, jeśli plik histetyczny zawiera 400 wpisów, w czasie wykonywania bash zostanie dodanych 10 nowych wpisów - rozmiar histerezy jest ustawiony na 500, a następnie nowy plik histetyczny zawiera 410 wpisów.
To zachowanie jest problematyczne tylko wtedy, gdy używasz większej liczby wystąpień bash równolegle. W takim przypadku plik historii zawiera tylko zawartość ostatniej wychodzącej powłoki.
Niezależnie od tego: są ludzie, którzy ze względów prywatności chcą wyczyścić swoją historię przy wyjściu z powłoki.
źródło
histappend
ma jakiekolwiek znaczenie dla tegoroot
, czy historia sięga dysku? Ponownie wpływa to tylko na to, co jest napisane, a nie jeśli .histappend
a takżeHISTCONTROL=ignoredups:erasedups:ignorespace
wydaje się być dobrym rozwiązaniem dla większości ludzi.histappend
skuteczne jest bez znaczenia, jeśli mamHISTFILESIZE=
iHISTSIZE=
dla nieskończonej historii?Chyba dla historycznej zgodności. Ta
histappend
opcja nie istniała do momentu bash 2.0.źródło
histappend
.