2023-10-01 08:00:02

无限敲打历史

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


当前回答

将.bashrc中的HISTSIZE和HISTFILESIZE设置为空字符串:

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版本。

其他回答

多年来,在经历了许多大型、丑陋的迭代和奇怪的边缘情况之后,我现在在.bashrc中有一个简洁的部分专门用于此。

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

# 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启动时间产生太大影响。

将.bashrc中的HISTSIZE和HISTFILESIZE设置为空字符串:

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版本。

Jörg Beyer在他的回答中提到,HISTSIZE和HISTFILESIZE是关键。

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

链接:这里,并使用bash历史记录。bash变量常见问题解答也值得一看。

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

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

详情在这里

我想我们可以同意“无限”这个词通常与“非常大”相同(或者你有无限的文件存储空间吗?)把值设得很大。