Czasami moja .bash_history zostaje wyczyszczona. Dlaczego? Jak mogę temu zapobiec?

3

Oto moja skorupa:

$ $SHELL --version | head -1
GNU bash, version 4.1.7(2)-release (i386-apple-darwin10.3.0)

Oto moje ustawienia związane z historią:

export HISTCONTROL=ignoredups:erasedups
export HISTSIZE=100000
export HISTFILESIZE=100000
shopt -s histappend
shopt -s histverify ## edit a recalled history line before executing
shopt -s histreedit ## reedit a history substitution line if it failed

## Save the history after each command finishes
## (and keep any existing PROMPT_COMMAND settings)
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Aktualizacja

Byłem w stanie spowodować obcięcie za pomocą sudo -s. Po wejściu do powłoki sudo historia jest obcinana do 500 wpisów. Na jakie pliki rc sudo -spatrzy, aby upewnić się, że ładuje moje ustawienia historii?

kch
źródło
To jest naprawdę fajne i powiązane: bradchoate.com/weblog/2006/05/19/daily-history-files-for-bash
kch

Odpowiedzi:

3

Jest jeszcze jedna zmienna, którą musisz sprawdzić: HISTFILESIZE

Od man bash:

HISTFILESIZE
Maksymalna liczba wierszy zawartych w pliku historii. Gdy tej zmiennej zostanie przypisana wartość, plik historii jest w razie potrzeby obcinany przez usunięcie najstarszych wpisów, aby zawierał nie więcej niż tę liczbę wierszy. Wartość domyślna to 500. Plik historii jest również obcinany do tego rozmiaru po zapisaniu go po wyjściu z powłoki interaktywnej.

Edytować:

Sprawdź pliki startowe, aby upewnić się, że są one przetwarzane poprawnie i we właściwej kolejności oraz że zmienne są ustawione we właściwym i nie są zastępowane.

Wolę nie pobierać jednego „oficjalnego” pliku startowego z innego, ale mieć wspólny kod w trzecim „lokalnym” pliku, który jest pozyskiwany przez każdy z „oficjalnych” plików i pozwolić powłoce określić, kiedy są przetwarzane (interaktywne czy nie, zaloguj się lub nie). Uważaj, że niektóre dystrybucje mają skonfigurowane te pliki, tak aby jedno źródło miało inne źródło, więc chcesz mieć pewność, że nie skonfigurujesz nieskończonej pętli.

Jeśli używasz tych plików historii bardziej do rejestrowania niż ponownego użycia poprzednich poleceń, spójrz na moje funkcje rejestrowania i sprawdź, czy spełniają one Twoje potrzeby. Nadal możesz korzystać z historii - po prostu nie musisz jej przechowywać.

Aby uzyskać więcej informacji, patrz komentarze poniżej.

Dennis Williamson
źródło
1
Hum, spróbuje tego. Ale ta domyślna wartość 500 dała mi podpowiedź (tak samo jest w przypadku HISTSIZE): może kiedy uruchamiam powłokę, która nie ustawia tych zmiennych, domyślnie 500 włącza i obcina moją historię. Ma sens?
kch
@kch: Ma dla mnie sens.
Dennis Williamson,
Więc zmieniłem monit, aby pokazać długość historii i pilnuję jej, aby lepiej zrozumieć, co spowodowałoby obcinanie. (Teraz jednak pracuję z ustawionym HISTFILESIZE.) Jakikolwiek pewny sposób na wejście do powłoki, która nie miałaby moich ustawień historii? (więc mogę spróbować przetestować moją teorię i wymusić obcięcie)
kch
@kch: Trybash --norc --noprofile
Dennis Williamson
Więc bash --norc --noprofilenie spowodowało problemu, ale sudo -stak zrobiło. Odpowiednio zaktualizowałem pytanie.
kch
0

I wydajesz się raczej pewien, że to nie ty (przypadkowo) go usunąłeś ... Czy jesteś jedynym użytkownikiem na tym komputerze?

To jest bardzo niezwykłe. Upewnij się, że nikt nie ingeruje w twoją historię bash. Może znajdziesz inspirację tutaj: http://everything2.com/title/Protect+against+deleted+.bash_history+files

Kurt Pfeifle
źródło
Tak, tylko ja. Nie ma mowy, żebym usunął plik. Dzieje się to dość regularnie. Nie sądzę nawet, aby plik został kiedykolwiek usunięty, a jedynie obcięty.
kch