以下众所周知的片段中用于保存 bash 历史记录的“history -c;”的解释

以下众所周知的片段中用于保存 bash 历史记录的“history -c;”的解释

当我打开多个 tmux 窗格时,我在 .bashrc 文件中使用以下代码来保留历史记录中的所有内容:

# Avoid duplicates
HISTCONTROL=ignoredups:erasedups
# When the shell exits, append to the history file instead of overwriting it
shopt -s histappend

# After each command, append to the history file and reread it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

我在我的linux机器上没有任何问题。然而在 macOS 上,当专门与 tmux 一起使用时会出现一些问题(意味着多个打开的异步终端在没有 tmux 的情况下也可以正常工作)。

然后发生的事情是 tmux 中的新窗格具有完全空的历史记录。

这是有问题的参考评论在多个终端窗口中保留 bash 历史记录,在 macOS 上使用类似的程序显示相同的问题screen

评论参考

我尝试删除history -c;该命令的一部分,现在新 tmux 窗格中的历史记录不为空。但是,我不确定这是否是一个可行的解决方案以及它可能有哪些警告。因此,我的主要问题是这个角色扮演什么角色history -c以及为什么需要它。

笔记:如果您无法重现问题,请指出,我将提供操作系统版本、程序版本和日志。

答案1

简单、简短的答案是,如果您不执行history -cbefore a,history -r您将阅读历史记录两次

最后一个命令(及其编号)由以下命令给出fc -l -1

$ fc -l -1

19131    clear

如果你读过历史文件再次,您将复制大部分历史记录(在内存中,而不是在文件中):

$ history -r; fc -l -1

38319    fc -l -1

这就是拥有和使用的原因history -c

空历史

然后发生的事情是 tmux 中的新窗格具有完全空的历史记录。解决方法必须非常简单:只需执行

history -r

并且历史文件中的所有历史记录都会重新出现在内存中。

相关内容