Answers:
历史记录项不显示的最可能原因不是没有设置为零HISTFILE
或HISTSIZE
为零,而是通过两次登录同一台计算机并退出第二个bash实例(在该实例中您几乎没有执行或不执行任何操作)退出的,你做了很多。默认情况下,Bash不会合并历史记录,并且第二次Bash退出会覆盖.bash_history
由第一次Bash退出很好地更新的历史记录。
为了防止这种情况发生,您可以将其附加到历史记录文件中而不是覆盖它,可以使用histappend
shell选项:
如果启用了histappend shell选项(请参阅下面的SHELL BUILTIN COMMANDS下的shopt描述),则这些行将附加到历史文件中,否则将覆盖历史文件。
更多细节在这个答案,包括如何使用HISTSIZE
,HISTFILESIZE
并HISTCONTROL
控制规模,重复等。
要修改历史尺寸使用两种BASH变量HISTSIZE
,HISTFILESIZE
(通常在设定.bashrc
)。
BASH手册页中的描述:
HISTSIZE 命令在命令历史记住的数量(见下历史)。如果值为0,则命令不会保存在历史记录列表中。数值小于零会导致每个命令都保存在历史记录列表中(没有限制)。读取任何启动文件后,shell会将默认值设置为500。
HISTFILESIZE 历史记录文件中包含的最大行数。为该变量分配一个值后,如果有必要,将通过删除最旧的条目来截断历史记录文件,使其包含的行数不超过该行数。在退出外壳程序时,将历史文件写入后也将被截断为该大小。如果值为0,则历史记录文件将被截断为零大小。非数值和小于零的数值禁止截断。读取任何启动文件后,shell会将默认值设置为HISTSIZE的值。
例如,我的.bashrc
文件中有以下设置:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
验证您的HISTCONTROL
环境变量未设置为ignorespace
或ignoreboth
。
$ echo $HISTCONTROL
ignoredups #this is ok
您可以通过在您~/.bash_profile
或您的~/.profile
文件中设置值来修改它:
HISTCONTROL=ignoredups
从bash
手册页:
历史控制
用冒号分隔的值列表,用于控制如何在历史记录列表中保存命令。
如果值列表包含
ignorespace
,则以空格字符开头的行不会保存在历史记录列表中。值
ignoredups
导致不保存与先前的历史记录条目匹配的行。的值
ignoreboth
是ignorespace
和的简写ignoredups
。值
erasedups
导致在保存该行之前将所有与当前行匹配的先前行从历史记录列表中删除。不在上面列表中的任何值都将被忽略。
如果
HISTCONTROL
未设置,或者不包含有效值,则由shell解析器读取的所有行都将保存在历史记录列表中,但其值为HISTIGNORE
。多行复合命令的第二行和后续行未经测试,并且不管的值如何都被添加到历史记录中HISTCONTROL
。