由于某种原因,我无法让系统在重启后保留BASH历史记录。这是我的相关部分~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
据我所知,所有这些都是必要的选项(我知道我曾经能够在多次重新启动后保留历史记录,而过去却没有所有这些选项)。但是,尽管之前已在几次重新引导中添加了这些选项,但在重新引导后,我仍然失去了大部分历史记录。它不是空的,但是没有重新启动前的9999行。
在有人抱怨之前,是的,我已经阅读了这些问题。我已经执行了上面列出的一些建议,其余建议没有帮助或不相关:
- 使用histappend时Bash历史记录丢失
- 如何防止Bash更改历史记录?
- 什么决定了bash history命令中显示的内容?
- 如何在各个会话之间保留bash历史记录?
- 定期保存bash历史记录
如果那里可能还有其他相关命令,您可以~/.bashrc
在此处查看我的全部内容。
那么,我想念什么?为什么我的历史记录没有保存?如果有人认为其他文件可能相关,请告诉我,我将其发布。我通过运行grep -i hist \.*
进行检查,$HOME
该结果显示唯一相关的.
文件包含字符串hist
或HIST
为.bashrc
。
我正在运行Linux Mint Debian Edition,GNU bash,版本4.2.36(1)-发行版(x86_64-pc-linux-gnu),而我最喜欢的终端模拟器是(如果相关)terminator
。
更新:
遵循@mpy在评论中的建议,我~/.bashrc
将set 改为HISTFILE=~/bash_history
默认值~/.bash_history
,这似乎解决了交互式shell的问题。登录外壳仍然显示相同的行为,历史记录在行处被截断500
。但是,HIST
在相关文件中没有设置相关变量:
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
那么,除非我明确将default 设置为默认值,否则为什么set HISTSIZE
和HISTFILESIZE
in ~/.bashrc
还不够?$HISTFILE
~/.bash_history
history
命令时,cat .bash_history
除了行号以外,您看到的输出与运行中的输出相同。我的意思是history
命令列出时间戳或其他信息吗?我要问的原因是,如果您看到这些深奥的内容,则意味着还有另一个模块/功能/程序,这与shell历史记录混淆,并且其内容存在错误或错误的版本,可能会导致您感到悲伤。
;)
:尝试将另一个文件作为HISTFILE而不是default ~/.bash_history
。非常有条理的解释:我假设bash是您的默认外壳程序,因此在系统启动时,非交互式外壳程序是X会话的父级(我也假设您使用X),这对histappend选项一无所知(因为.bashrc仅(由交互式外壳读取),因此只要此父外壳运行,一切都很好,但是在终止(即系统停止)时,它将覆盖~/.bash_history
(默认)并弄乱您的历史记录……