Как сохранить историю Баш?


9

Я не знаю, ожидается ли это, но моя история не сохраняется между сеансами. Это означает, что если я закрою окно, то при повторном его открытии история будет пустой. Как я могу сохранить это через сеансы?

Вот результаты заданных вами команд:

 set -o | grep history
history         on

$ grep -i history ~/.bashrc ~/.bash_profile ~/etc/bash.bashrc ~/etc/profile ~/.profile
/cygdrive/c/cygwin/home/car/.bashrc:# Make bash append rather than overwrite the history on disk
/cygdrive/c/cygwin/home/car/.bashrc:# History Options
/cygdrive/c/cygwin/home/car/.bashrc:# Don't put duplicate lines in the history.
/cygdrive/c/cygwin/home/car/.bashrc:# export PROMPT_COMMAND="history -a"
grep: /cygdrive/c/cygwin/home/car/etc/bash.bashrc: No such file or directory
grep: /cygdrive/c/cygwin/home/car/etc/profile: No such file or directory
/cygdrive/c/cygwin/home/car/.profile:if [ "x$HISTFILE" == "x/.bash_history" ]; then
/cygdrive/c/cygwin/home/car/.profile:  HISTFILE=$HOME/.bash_history

$ ls -la ~/ | grep history -> no output

$ echo $HISTFILE 
~/.bash_history
$ echo $HISTSIZE
500
$ echo $HISTFILESIZE 
500

После правок, описанных в ответе ниже, я теперь получаю:

grep -i hist .bashrc
# Make bash append rather than overwrite the history on disk
shopt -s histappend
# History Options
# Don't put duplicate lines in the history.
export HISTCONTROL="ignoredups"
# (added) A new shell gets the history lines from all previous shells
PROMPT_COMMAND='history -a'
# HISTIGNORE is a colon-delimited list of patterns which should be excluded.

Я все еще не могу сохранить историю между сеансами. Я читаю следующие вопросы:

Похоже, никто не решил мою проблему, включая ответ ниже от того самого человека, которому ответили на вопрос от предполагаемого дубликата.


Также посмотрите мой вопрос здесь и вопросы, на которые он ссылается. Попробуйте предложения в них и спросите еще раз, если у вас все еще есть проблемы. В то время голосование закрывалось как дубликат.
— Terdon

редактировать: set -o | grep history показывает, что история включена, echo $ HISTFILE показывает ~ / .bash_history, echo $ HISTSIZE и $ HISTFILESIZE оба показывают 500. Но история все еще не сохраняется между сеансами
— Car981

$ HISTFILE установлен в ~ / .bash_history, но в ~ нет файла .bash_history. Как это может быть ?
— Car981

Пожалуйста, отредактируйте свой вопрос, чтобы добавить новую информацию, а не комментировать. Включить вывод этих команд: set -o | grep history, grep -i history ~/.bashrc ~/.bash_profile ~/etc/bash.bashrc ~/etc/profile ~/.profileи ls -la ~/ | grep history.
— Terdon

Попробуйте установить историю конкретного файла, добавьте следующую строку в файл ~/.bashrc: export HISTFILE="~/history". Это имеет значение?
— Terdon

Ответы:


7

Ну, похоже, у вас ~/.bashrcнет необходимых опций. Убедитесь, что эти строки в вашем ~/.bashrc:

# Make Bash append rather than overwrite the history on disk:
shopt -s histappend
# A new shell gets the history lines from all previous shells
PROMPT_COMMAND='history -a'
# Don't put duplicate lines in the history.
export HISTCONTROL=ignoredups

Это все еще не работает. См. Редактирование для обновления нового результата вывода.
— Car981

7

Хорошо, я узнал, что не так. Я не могу закрыть окно, я должен напечатать «выход», чтобы оно закрылось изящно.


Вы ответили на свой вопрос! Это здорово, но вы должны пометить его как таковой, чтобы другие знали, что вы не ожидаете дальнейших ответов.
— Тьяго

Трудно сказать, что это приемлемый ответ - у меня та же проблема, и ручное закрытие окна для сохранения истории не очень хорошая идея. Часто я закрываю окно терминала другими способами и не хотел бы его терять.
— Кшиштоф Бочюрко
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.