无限敲打历史

我希望我的.bash_history文件是无限的。例:所以我总是可以回头看看我是如何构建/配置某些东西的,或者那个漂亮的命令是什么,或者几个星期前某个命令是如何破坏某些东西的。如何更改此设置?

171263 次浏览

这里(至少)有两个相关的环境变量:

  • HISTSIZE: 存储在内存中的条目数
  • HISTFILESIZE:为存储在历史文件中的行数

**细节是在这里

我认为我们可以同意术语无限的通常与非常大的相同(或者你有无限的文件存储?)把值设得很大。

Jörg Beyer 在他的回答中提到HISTSIZEHISTFILESIZE是关键。

此外,你应该肯定检查环境变量HISTCONTROL,它让你做一些很酷的事情,比如不存储重复的历史命令(HISTCONTROL=erasedups)。如果你必须浏览数百行cd ..或类似的内容,那么拥有无限的历史记录是没有意义的。

链接:在这里使用bash历史记录。bash变量FAQ也是值得浏览

将.bashrc中的HISTSIZEHISTFILESIZE设置为空字符串:

HISTSIZE=
HISTFILESIZE=

Bash 4.3及更高版本中,你也可以使用HISTSIZE=-1 HISTFILESIZE=-1:

n.  Setting HISTSIZE to a value less than zero causes the history list to be
unlimited (setting it 0 zero disables the history list).


o.  Setting HISTFILESIZE to a value less than zero causes the history file size
to be unlimited (setting it to 0 causes the history file to be truncated
to zero size).

bash --version检查你的bash版本。

经过多年来大量丑陋的迭代和奇怪的边缘情况,我现在有一个.bashrc的简明部分专门用于此。

首先,你必须注释掉或删除.bashrc的这个部分 (Ubuntu的默认值)。如果你不这样做,那么某些环境(比如运行screen会话)仍然会截断你的历史记录:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

其次,添加这个到你的.bashrc的底部:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

注意:每个命令都是在运行后立即写入的,所以如果你不小心粘贴了密码,你不能“;kill -9 %%"为了避免历史记录写入,您需要手动删除它。

还要注意,每个bash会话都会在内存中加载完整的历史文件,但即使历史文件增长到10MB(这将花费很久很久时间),你也不会注意到bash启动时间有多大影响。