我希望我的
.bash_history
文件不受限制。例如所以我总是可以回去看看我是如何构建/配置某些东西的,或者那个漂亮的命令是什么,或者某些命令如何在几周前破坏了某些东西。如何更改此设置?
多年来,经过多次大型、丑陋的迭代和奇怪的边缘情况,我现在有一个简洁的 我的
.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 启动有太大影响时间。
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 --version
检查您的 bash 版本。
在他的回答中提到,HISTSIZE
和
HISTFILESIZE
是关键。此外,您应该
一定检查环境变量HISTCONTROL
,它可以让您做一些很酷的事情,例如不存储重复的历史命令(
HISTCONTROL=erasedups
)。如果您必须浏览数百行
cd ..
或类似内容,那么拥有无限历史记录是没有意义的。链接:
此处和使用 bash 历史记录。 bash 变量常见问题解答也值得浏览。