无限的Bash历史

时间:2012-02-26 21:15:35

标签: bash unix

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

4 个答案:

答案 0 :(得分:370)

经过多年来的许多大型,丑陋的迭代和奇怪的边缘情况,我现在有一个简明的my .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"

注意:每个命令在运行后立即写入,因此如果您不小心粘贴了密码,则不能只是“杀死-9 %%”以避免写入历史记录,您需要手动将其删除。

另请注意,每个bash会话都会在内存中加载完整的历史记录文件,但即使您的历史记录文件增长到10MB(这将需要长,时间),您也不会注意到对你的bash启动时间有影响。

答案 1 :(得分:239)

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

HISTSIZE= 
HISTFILESIZE=

bash 4.3 and later中,您还可以使用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).

答案 2 :(得分:34)

正如JörgBeyer所述,HISTSIZEHISTFILESIZE是关键。

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

链接:hereworking with bash history。 bash变量常见问题解答也是worth browsing

答案 3 :(得分:22)

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

  • HISTSIZE:历史文件中的条目数
  • HISTFILESIZE:历史文件中的行数

我认为我们可以同意无限一词通常与非常大相同(或者您有无限的文件存储空间?)。所以只需将值设置得非常大。