Нажатие стрелки вверх не приводит к циклическому просмотру истории

Я новичок в 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

Может кто-нибудь объяснить, почему это так, и есть ли обходной путь? Спасибо.

0
10.07.2017, 19:44
2 ответа

Кажется, решение можно найти в разделе комментариев по ссылке, которую я разместил :см. История Bash :«Игнорируемые дубликаты» и «стертые дубликаты» конфликтуют с общей историей сеансов

Вместо:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Используйте:

PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
1
28.01.2020, 04:44

Причина наличия истории всех мест, где bash имеет историю (и записывает в нее ), заключается в том, что вы пишете в файл (history -a )и все остальные bash оболочки также записывают в один и тот же файл.

Затем вы читаете все команды из файла (history -r )в память.

В качестве решения можно записать (новые )команды в файл (history -a ), но не читать полученный файл. Список команд в памяти будет принадлежать каждому запущенному экземпляру bash. У каждого экземпляра bash будет свой список команд. Все команды будут записаны в файл истории.

Используйте (в bashrc или аналогичный):

PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
0
28.01.2020, 04:44

Теги

Похожие вопросы