这是我的外壳:
$ $SHELL --version | head -1
GNU bash, version 4.1.7(2)-release (i386-apple-darwin10.3.0)
以下是我的历史相关设置:
export HISTCONTROL=ignoredups:erasedups
export HISTSIZE=100000
export HISTFILESIZE=100000
shopt -s histappend
shopt -s histverify ## edit a recalled history line before executing
shopt -s histreedit ## reedit a history substitution line if it failed
## Save the history after each command finishes
## (and keep any existing PROMPT_COMMAND settings)
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
更新
我能够使用 来导致截断sudo -s
。进入 sudo shell 后,历史记录被截断为 500 个条目。sudo -s
它会查看哪些 rc 文件,以确保它加载我的历史记录设置?
答案1
您需要检查另一个变量:HISTFILESIZE
从man bash
:
HISTFILESIZE
历史文件所含的最大行数。当此变量被赋值时,历史文件将被截断(如果需要),方法是删除最旧的条目,以使其不超过该行数。默认值为 500。当交互式 shell 退出时,写入历史文件后,历史文件也会被截断为此大小。
编辑:
检查您的启动文件,以确保它们被正确地按照正确的顺序处理,并且变量被设置为正确的并且没有被覆盖。
我倾向于不从另一个“官方”启动文件中获取一个启动文件,而是将通用代码放在第三个“本地”文件中,该文件由每个“官方”文件获取,并让 shell 确定何时处理它们(是否交互、是否登录)。请注意,某些发行版确实设置了这些文件,以便一个文件获取另一个文件,因此您要确保不会设置无限循环。
如果你更多地使用这些历史文件进行日志记录而不是重复使用以前的命令,请查看我的日志功能看看它们是否满足您的需求。您仍然可以使用历史记录 - 只是不需要保留那么多。
请参阅下面的评论以了解更多详细信息。
答案2
而且您似乎非常确定,不是您自己(意外地)删除了它...您是这台计算机上的唯一用户吗?
所以这是非常不寻常的。确保没有人篡改你的 bash_history。也许你可以从这里得到一些启发:http://everything2.com/title/Protect+against+deleted+.bash_history+files