点击向上箭头不会循环浏览历史记录

点击向上箭头不会循环浏览历史记录

我是 Unix&Linux 的新手,想对另一个问题的已经详尽的方法发表评论。我的代表还不到 50 岁(悲伤),所以它不会让我这么做。我尝试了这个问题的解决方案:在多个终端窗口中保留 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

有人可以解释为什么会这样吗?是否有解决方法?谢谢。

答案1

似乎可以从我发布的链接中的评论部分导航到解决方案:请参阅Bash 历史记录:“ignoredups”和“erasedups”设置与跨会话的共同历史记录冲突

而不是:

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

使用:

PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

答案2

拥有 bash 有历史记录(并写入历史记录)的所有位置的历史记录的原因是,您正在写入文件(history -a),而所有其他 bash shell 都是写入同一个文件。

然后,您将文件(history -r)中的所有命令读取到内存中。

作为解决方案,您可以将(新)命令写入文件 (history -a),但不读取生成的文件。命令列表在记忆中将属于正在运行的 bash 的每个实例。 bash 的每个实例都会有不同的命令列表。所有命令都将写入历史文件。

用于bashrc或类似):

PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

相关内容