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?


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.