Чомусь я не можу заставити свою систему зберігати свою історію 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
(що за замовчуванням) і заплутує вашу історію ...