Чомусь я не можу заставити свою систему зберігати свою історію BASH після перезавантаження. Ось відповідні розділи мого ~/.bashrc:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
Наскільки я можу сказати, що це всі необхідні варіанти (я знаю, що раніше міг зберігати історію в кількох перезавантаженнях, не маючи всіх цих даних у минулому). Однак, незважаючи на те, що додав ці параметри кілька перезавантажень тому, я все ще втрачаю більшу частину своєї історії після перезавантаження. Вона не порожня, але в ній немає 9999 рядків, які я мав перед перезавантаженням.
Перш ніж хтось скаржиться, так, я прочитав ці питання. Я реалізував деякі їх пропозиції, як перераховано вище, решта були або не корисними, ні не були актуальними:
- Втрата історії Bash при використанні histappend
- Як не допустити, щоб Баш змінив історію?
- Що визначає, що відображається в команді історії bash?
- Як зберігати історію баш-сеансів протягом сеансів?
- зберігати історію баш, регулярно
За випадковості, що там можуть бути інші відповідні команди, ви можете переглянути всю мою ~/.bashrc тут .
Отже, чого я пропускаю? Чому мою історію не збережено? Якщо хтось думає, що інший файл може бути релевантним, дайте мені знати, і я опублікую його. Я перевірив, запустивши grep -i hist \.*в моєму , $HOMEякий показав , що релевантно тільки .файл , що містить рядок histабо HISTбув .bashrc.
Я запускаю Linux Mint Debian Edition, GNU bash, версія 4.2.36 (1) -release (x86_64-pc-linux-gnu) і мій улюблений емулятор терміналу (на випадок, якщо це доречно) terminator.
ОНОВЛЕННЯ:
На підставі пропозиції @ mpy в коментарях я змінив ~/.bashrcналаштування HISTFILE=~/bash_historyна відміну від типового, ~/.bash_historyі це, здається, вирішило проблему для інтерактивних оболонок . Оболонки для входу все ще демонструють однакову поведінку, історія врізана в 500рядки. Однак HISTу відповідних файлах не встановлені пов'язані змінні:
$ 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
Отже, чому встановлення, HISTSIZEа HISTFILESIZEв ~/.bashrcнедостатній, якщо я чітко не встановив $HISTFILEщось інше, ніж за замовчуванням ~/.bash_history?
historyкоманду, результат, який ви бачите, ідентичний тому, що ви бачите, працює cat .bash_history, крім номерів рядків? Я маю на увазі, чи historyвказано часові позначки часу чи іншу інформацію? Причина, про яку я запитую, - якщо ви бачите ці езотеричні речі, це означає, що є інший модуль / функція / програма, який псується з історією оболонки і неправильна або помилкова версія будь-якої, що може бути, може спричинити вам горе .
;): Спробуйте інший файл як HISTFILE, а не за замовчуванням ~/.bash_history. Дуже побудоване пояснення: я припускаю, що bash - це ваша оболонка за замовчуванням, тому при запуску системи неінтерактивна оболонка є батьківщиною вашого X-сеансу (я також припускаю, що ви використовуєте X), який нічого не знатиме про параметр histappend (як .bashrc лише читайте за допомогою інтерактивних оболонок), доки ця батьківська оболонка працює все добре, але після припинення (тобто припинення роботи системи) вона перекриє ~/.bash_history(що за замовчуванням) і заплутує вашу історію ...
