Bash 历史记录不一致

Bash 历史记录不一致

在这个 Debian Jessie 安装中,Bash 历史记录在 Gnome 终端中的表现似乎不一致:

$ echo $USER
me
$ echo $HISTFILE
/home/me/.bash_history
$ grep browser ~/.bash_history 
browser-sync start
$ history | grep browser
 2071  grep browser ~/.bash_history 
 2073  history | grep browser

browser-sync文件中的行相当~/.bash_history旧:比当前终端会话旧得多。为什么它没有出现在结果中history | grep browser

答案1

默认情况下,~/.bash_history交互式会话终止时写入磁盘。这意味着如果您打开了并发 shell,则只有最近终止shell 会话将其历史记录写入磁盘。

(从技术上讲,所有会话都写入磁盘,但两个并发会话不知道其他会话的历史记录,因此当一个会话退出时,它会写入什么认为新的历史是,然后当另一个退出时,它写它是历史)

https://unix.stackexchange.com/a/1292/20246更多细节。

答案2

$HISTSIZE变量的值太低。明显的不一致可以通过充分增加 的值来解决$HISTSIZE

bash手册并没有很好地解释它:

历史大小

历史列表中要记住的最大命令数。如果值为 0,则命令不会保存在历史列表中。小于零的数值会导致每个命令都保存在历史列表中(没有限制)。 shell 在读取任何启动文件后将默认值设置为 500。

这里是一个更好的解释:

HISTSIZE 的默认值 (500) 将仅加载已保存历史记录的一小部分[如果已保存历史记录大于 500 行]。

相关内容