当我打开多个 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 -c
before 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
并且历史文件中的所有历史记录都会重新出现在内存中。