无限的Bash历史

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

HISTSIZEHISTFILESIZE设置为空string:

 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). 

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

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

 # 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会话都会在内存中加载完整的历史logging文件,但即使您的历史logging文件增长到10MB(这将需要很长很长的时间),您将不会注意到对bash启动时间的很大影响。

正如HISTSIZE所述, HISTSIZEHISTFILESIZE是关键。

另外,你应该检查一下环境variablesHISTCONTROL ,它可以让你做一些很酷的事情,比如不存储重复的历史命令( HISTCONTROL=erasedups )。 没有无限的历史是没有意义的,如果你必须浏览数百行cd ..或类似的。

链接: 在这里 ,并使用bash历史logging 。 bashvariables常见问题也值得浏览 。

这里至less有两个相关的环境variables:

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

我认为我们可以同意, 无限这个词通常是相当大的 (或者你有无限的文件存储?)。 所以只需设置非常大的值。