有时历史记录命令未存储在.bash_history中


20

我昨天在CentOS 7中发布了许多命令。但是当我今天想检索这些命令时,我发现没有任何记录。当我打开文件时.bash_history,我仍然找不到昨天发出的命令,但几天前我发现了许多旧命令。为什么不存储最近的命令?如何增加历史记录功能?


有时,当终端异常关闭时,历史记录也不会保存,我
也曾经历

Answers:


11

历史记录项不显示的最可能原因不是没有设置为零HISTFILEHISTSIZE为零,而是通过两次登录同一台计算机并退出第二个bash实例(在该实例中您几乎没有执行或不执行任何操作)退出的,你做了很多。默认情况下,Bash不会合并历史记录,并且第二次Bash退出会覆盖.bash_history由第一次Bash退出很好地更新的历史记录。

为了防止这种情况发生,您可以将其附加到历史记录文件中而不是覆盖它,可以使用histappendshell选项:

如果启用了histappend shell选项(请参阅下面的SHELL BUILTIN COMMANDS下的shopt描述),则这些行将附加到历史文件中,否则将覆盖历史文件。

更多细节在这个答案,包括如何使用HISTSIZEHISTFILESIZEHISTCONTROL控制规模,重复等。


3

要修改历史尺寸使用两种BASH变量HISTSIZEHISTFILESIZE(通常在设定.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

1

我发生过这种情况,但此处未列出解决方案。原因只是一个简单的复制粘贴问题。我正在从另一个文档复制命令,剪贴板上有一些额外的空白。由于某种原因,这导致Ubuntu无法将命令保存到历史文件中。

在此处输入图片说明

上图是我在剪贴板google docs中输入的命令。该命令已运行,但从我的历史记录中被省略。我只是返回并选择了没有空格的命令,然后它出现在bash历史记录中。


5
历史记录选项之一是忽略(不保存)以空格开头的行。通常默认为开。可以在您的.bashrc中进行更改。
studog

1

验证您的HISTCONTROL环境变量未设置为ignorespaceignoreboth

$ echo $HISTCONTROL
ignoredups  #this is ok

您可以通过在您~/.bash_profile或您的~/.profile文件中设置值来修改它:

HISTCONTROL=ignoredups

bash手册页:

历史控制

用冒号分隔的值列表,用于控制如何在历史记录列表中保存命令。

如果值列表包含ignorespace,则以空格字符开头的行不会保存在历史记录列表中。

ignoredups导致不保存与先前的历史记录条目匹配的行。

的值ignorebothignorespace和的简写ignoredups

erasedups导致在保存该行之前将所有与当前行匹配的先前行从历史记录列表中删除。

不在上面列表中的任何值都将被忽略。

如果HISTCONTROL 未设置,或者不包含有效值,则由shell解析器读取的所有行都将保存在历史记录列表中,但其值为HISTIGNORE。多行复合命令的第二行和后续行未经测试,并且不管的值如何都被添加到历史记录中HISTCONTROL

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.