为什么 Bash 不扫描自己的所有历史文件

为什么 Bash 不扫描自己的所有历史文件

我对所有会话使用一个通用历史记录。然而,我经常遇到这种情况,部分历史记录会丢失。因此,我只是交换不同的“通用会话”脚本,希望有一个脚本可以修复它,但目前还没有办法。它有效大多, 但不总是。

我决定仔细研究一下,但 Ctrl+Rvalgrind什么都没显示。是的,它在历史文件中 -.bash_history在编辑器中打开并搜索会显示以 开头的多个命令valgrind。仍然history |grep valgrind只显示它自己,事实上,这个命令被放入所说的 中.bash_history,在它的最后,远远落后于包含 的其他命令valgrind。这不是打字错误 - 历史文件包含许多iptables命令,这些命令history通过 Ctrl+R 是不可见的。同一文件中的较新历史记录是可见的,并且可以正常访问它。

我怀疑 Bash 历史记录为何如此糟糕。有什么解释吗?

编辑:有一个类似的问题,但没有真正的答案:“Control R” bash 快捷键搜索的条目数是否有限制?

答案1

bash在会话开始时不会全部加载~/.bash_history。它只加载由 shell 变量指定的一些命令HISTSIZE

内存中保存的历史记录与文件中保存的历史记录之间存在差异~/.bash_history。要加载bash更多内容,~/.bash_history您需要将其设置HISTSIZE为更高的数字。

GNU bash 文档

The value of the HISTSIZE shell variable is used as the number of commands 
to save in a history list.

文档中的“历史列表”是指保存在内存中的历史记录。

相关内容