Я новичок в Unix и Linux и хотел прокомментировать уже исчерпывающий подход к другому вопросу. Моему представителю еще нет пятидесяти (грустно), так что меня не пускает. Я попробовал следующее решение этого вопроса: Сохранить историю bash в нескольких окнах терминала
export HISTCONTROL=ignoredups:erasedups # no duplicate entries
export HISTSIZE=100000 # big big history
export HISTFILESIZE=100000 # big big history
shopt -s histappend # append to history, don't overwrite it
# Save and reload the history after each command finishes
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
К сожалению, это приводит к тому, что, хотя у меня есть растущая (объединенная) история (желательно), в новых окнах я больше не могу циклически через любой из них, используя «стрелку вверх» (нежелательно). То есть я могу только циклически перебирать команды, выполняемые в новом окне. Например, если я открываю новый терминал и получаю 500 строк истории, я выполняю 3 команды, я могу прокручивать эти 501-503 только стрелкой вверх ...
Я открываю новый терминал и делаю следующее :
$ history #enter
.
.
584 foo
585 bar
.
.
600 baz
$ history #enter
1 history
Может кто-нибудь объяснить, почему это так, и есть ли обходной путь? Спасибо.
Кажется, решение можно найти в разделе комментариев по ссылке, которую я разместил :см. История Bash :«Игнорируемые дубликаты» и «стертые дубликаты» конфликтуют с общей историей сеансов
Вместо:
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Используйте:
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
Причина наличия истории всех мест, где bash имеет историю (и записывает в нее ), заключается в том, что вы пишете в файл (history -a )и все остальные bash оболочки также записывают в один и тот же файл.
Затем вы читаете все команды из файла (history -r )в память.
В качестве решения можно записать (новые )команды в файл (history -a ), но не читать полученный файл. Список команд в памяти будет принадлежать каждому запущенному экземпляру bash. У каждого экземпляра bash будет свой список команд. Все команды будут записаны в файл истории.
Используйте (в bashrc или аналогичный):
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"