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

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.

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

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

Car981
источник
Также посмотрите мой вопрос здесь и вопросы, на которые он ссылается. Попробуйте предложения в них и спросите еще раз, если у вас все еще есть проблемы. В то время голосование закрывалось как дубликат.
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
terdon
источник
Это все еще не работает. См. Редактирование для обновления нового результата вывода.
Car981
7

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

Car981
источник
Вы ответили на свой вопрос! Это здорово, но вы должны пометить его как таковой, чтобы другие знали, что вы не ожидаете дальнейших ответов.
Тьяго
Трудно сказать, что это приемлемый ответ - у меня та же проблема, и ручное закрытие окна для сохранения истории не очень хорошая идея. Часто я закрываю окно терминала другими способами и не хотел бы его терять.
Кшиштоф Бочюрко