По какой-то причине я не могу заставить мою систему сохранять историю 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 изменить историю?
- Что определяет, что появляется в команде bash history?
- Как мне сохранить историю bash между сеансами?
- сохранить историю Bash, регулярно
Если у вас есть другие важные команды, вы можете посмотреть все мои ~/.bashrc
здесь .
Итак, что мне не хватает? Почему моя история не сохраняется? Если кто-то считает, что другой файл может быть уместным, дайте мне знать, и я опубликую его. Я проверил, запустив grep -i hist \.*
мой, $HOME
который показал, что единственный соответствующий .
файл, содержащий строку hist
или HIST
был .bashrc
.
Я использую Linux Mint Debian Edition, GNU bash, версия 4.2.36 (1) -релиз (x86_64-pc-linux-gnu) и мой любимый эмулятор терминала (в случае необходимости) terminator
.
ОБНОВИТЬ:
Следуя предложению @ mpy в комментариях, я изменил свой ~/.bashrc
на set 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
in ~/.bashrc
недостаточно, если я явно не установил что- $HISTFILE
то отличное от значения по умолчанию ~/.bash_history
?
history
команду, вывод, который вы видите, идентичен тому, что вы видите, работает cat .bash_history
, кроме номеров строк? Я имею в виду history
список команд отметки времени или другую информацию? Причина, по которой я спрашиваю, состоит в том, что, если вы видите эти эзотерические вещи, это означает, что есть другой модуль / функция / программа, которая работает с историей оболочки, и неправильная или ошибочная версия чего бы то ни было, может причинить вам горе ,
;)
: попробуйте другой файл как HISTFILE, а не по умолчанию ~/.bash_history
. Очень подробное объяснение: я предполагаю, что bash - это ваша оболочка по умолчанию, поэтому при запуске системы неинтерактивная оболочка является родителем вашей сессии X (я также предполагаю, что вы используете X), которая ничего не будет знать о параметре histappend (так как .bashrc только читать в интерактивных оболочках), так что до тех пор, пока эта родительская оболочка запускается, все в порядке, но после ее завершения (т.е. остановки системы) она будет переопределена ~/.bash_history
(что по умолчанию) и испортит вашу историю ...