Z jakiegoś powodu nie mogę zmusić mojego systemu do zachowania historii BASH po ponownym uruchomieniu. Oto odpowiednie sekcje mojego ~/.bashrc:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
O ile mogę powiedzieć, są to wszystkie niezbędne opcje ( wiem, że kiedyś mogłem przechowywać historię na wielu restartach bez tych wszystkich w przeszłości). Jednak pomimo dodania tych opcji kilka restartów temu, nadal tracę większość historii po ponownym uruchomieniu. Nie jest pusty, ale nie ma linii 9999, które miałem przed ponownym uruchomieniem.
Zanim ktokolwiek narzeka, tak, przeczytałem te pytania. Wdrożyłem niektóre z ich sugestii wymienionych powyżej, pozostałe były albo nieprzydatne, albo nieistotne:
- Utrata historii Bash podczas korzystania z histappend
- Jak zapobiec zmianie historii przez Bash?
- Co decyduje o tym, co pojawia się w poleceniu historii bash?
- Jak zachować moją historię bashów między sesjami?
- regularnie zapisuj historię bash
Jeśli nie ma szans, że mogą tam znajdować się inne odpowiednie polecenia, możesz zobaczyć moją całość ~/.bashrc tutaj .
Więc czego mi brakuje? Dlaczego moja historia nie jest zapisana? Jeśli ktoś uważa, że inny plik może być odpowiedni, daj mi znać, a ja go opublikuję. Sprawdziłem, uruchamiając grep -i hist \.*w moim, $HOMEktóry pokazał, że jedynym odpowiednim .plikiem zawierającym ciąg histlub HISTbył .bashrc.
Używam Linux Mint Debian Edition, GNU bash, wersja 4.2.36 (1) -release (x86_64-pc-linux-gnu) i mój ulubiony emulator terminala (jeśli jest to istotne) terminator.
AKTUALIZACJA:
Podążając za sugestią @ mpy w komentarzach, zmieniłem ~/.bashrcustawienie HISTFILE=~/bash_historyna przeciwne do domyślnego ~/.bash_historyi wydaje się, że to rozwiązuje problem interaktywnych powłok . Powłoki logowania nadal wyświetlają to samo zachowanie, a historia jest obcinana w 500wierszach. Jednak HISTw odpowiednich plikach nie ma powiązanych zmiennych:
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
Więc dlaczego jest ustawienie HISTSIZEi HISTFILESIZEw ~/.bashrcnie na tyle, chyba że wyraźnie ustawić $HISTFILEsię do czegoś innego niż domyślny ~/.bash_history?
historypolecenie, wynik, który widzisz, jest identyczny z tym, co widzisz, działającym cat .bash_history, innym niż numery linii? Mam na myśli, czy historyznaczniki czasu listy poleceń lub inne informacje? Pytam dlatego, że jeśli widzisz te ezoteryczne rzeczy, oznacza to, że istnieje inny moduł / funkcja / program, który psuje się z historią powłoki i zła lub błędna wersja tego, co jest, może powodować ci smutek .
;): Wypróbuj inny plik jako HISTFILE, a nie domyślny ~/.bash_history. Bardzo skonstruowane wyjaśnienie: Zakładam, że bash jest domyślną powłoką, więc po uruchomieniu systemu powłoka nieinteraktywna jest rodzicem sesji X (zakładam również, że używasz X), który nie będzie wiedział nic o opcji histappend (ponieważ .bashrc jest tylko czytane przez interaktywne powłoki), więc tak długo, jak ta macierzysta powłoka działa, wszystko jest w porządku, ale po zakończeniu (tj. zatrzymaniu systemu) zastąpi ~/.bash_history(co jest domyślne) i
