![为什么 Bash 不扫描自己的所有历史文件](https://linux22.com/image/1581927/%E4%B8%BA%E4%BB%80%E4%B9%88%20Bash%20%E4%B8%8D%E6%89%AB%E6%8F%8F%E8%87%AA%E5%B7%B1%E7%9A%84%E6%89%80%E6%9C%89%E5%8E%86%E5%8F%B2%E6%96%87%E4%BB%B6.png)
我对所有会话使用一个通用历史记录。然而,我经常遇到这种情况,部分历史记录会丢失。因此,我只是交换不同的“通用会话”脚本,希望有一个脚本可以修复它,但目前还没有办法。它有效大多, 但不总是。
我决定仔细研究一下,但 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
为更高的数字。
The value of the HISTSIZE shell variable is used as the number of commands
to save in a history list.
文档中的“历史列表”是指保存在内存中的历史记录。