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, $HOME
który pokazał, że jedynym odpowiednim .
plikiem zawierającym ciąg hist
lub HIST
był .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 ~/.bashrc
ustawienie HISTFILE=~/bash_history
na przeciwne do domyślnego ~/.bash_history
i wydaje się, że to rozwiązuje problem interaktywnych powłok . Powłoki logowania nadal wyświetlają to samo zachowanie, a historia jest obcinana w 500
wierszach. Jednak HIST
w 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 HISTSIZE
i HISTFILESIZE
w ~/.bashrc
nie na tyle, chyba że wyraźnie ustawić $HISTFILE
się do czegoś innego niż domyślny ~/.bash_history
?
history
polecenie, 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 history
znaczniki 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