Dlaczego ktokolwiek miałby nie ustawiać „histappend” w bash?

36

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?

tshepang
źródło
oprócz niezrozumienia tego, co robi ta opcja - poprawione przez @maxscchlepzig - „default” ma co najmniej dwa źródła: 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=452459
underscore_d
3
Cóż, unix nie słynie z rozsądnych ustawień domyślnych? Domyślam się, że domyślnie są najbardziej nieprzyjazne domyślne: P (drobne przesadzone)
olejorgenb 20.10.16

Odpowiedzi:

34

Cóż, gdy histappendnie jest ustawione, nie oznacza to, że historia jest czyszczona przy każdym wyjściu z powłoki. Bez histappendbash 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.

maxschlepzig
źródło
Ponadto ze względów bezpieczeństwa dobrym pomysłem może być nie zapisywanie historii dla użytkownika root. Ta funkcja pozwala rootowi mieć historię powłoki bez zapisywania jej na dysku.
Mei
1
+1 dla „nie oznacza, że ​​historia jest usuwana przy każdym wyjściu z powłoki”. Jest to wyjaśnione doskonale gdzie indziej - ale być może nie na tyle zwięźle, aby dotrzeć do niektórych czytelników, szczególnie w kontekście nazwy opcji (OK, mógłbym być jednym z tych czytelników przez jakiś czas). @Mei, w jaki sposób permutacja histappendma jakiekolwiek znaczenie dla tego root, czy historia sięga dysku? Ponownie wpływa to tylko na to, co jest napisane, a nie jeśli .
underscore_d
5
czy ktoś uruchamia mniej niż 2 instancje bash? histappenda także HISTCONTROL=ignoredups:erasedups:ignorespacewydaje się być dobrym rozwiązaniem dla większości ludzi.
dashy
Czy histappendskuteczne jest bez znaczenia, jeśli mam HISTFILESIZE=i HISTSIZE=dla nieskończonej historii?
Marc.2377
1
@dashesy Osobiście nie lubię ignorować / wymazywać zduplikowanych wpisów. Mam włączoną funkcję HISTTIMEFORMAT i lubię mieć możliwość powrotu i sprawdzenia, kiedy wydałem polecenie ... a jeśli wydałem je wiele razy, chcę wiedzieć, kiedy każde zostało wydane. To osobiste preferencje, do których należą. ;)
msb
9

Chyba dla historycznej zgodności. Ta histappendopcja nie istniała do momentu bash 2.0.

Gilles „SO- przestań być zły”
źródło
1
Czy historia była nadpisywana za każdym razem?
tshepang 27.01.11
3
@Tshepang: Tak, tak samo jak teraz, jeśli nie używasz histappend.
Gilles „SO- przestań być zły”
powinien być teraz domyślny, ale tak nie jest
odważny