如何避免 .bash_history 中的重复条目

kar*_*k87 135 bash history

相同的命令一次又一次地列在我的历史记录中。我怎样才能避免这种情况?我知道可以通过HISTCONTROL但我还没有找到正确的方法。

Isa*_*iah 152

bash手册页:

组织控制

以冒号分隔的值列表,用于控制命令在历史列表中的保存方式。如果值列表包括ignorespace,以空格字符开头的行不会保存在历史列表中。值 ignoredups导致匹配先前历史条目的行不被保存。的值ignorebothignorespace and 的 简写 ignoredups。一个值erasedups导致在保存该行之前从历史列表中删除与当前行匹配的所有先前行。任何不在上述列表中的值都将被忽略。如果 HISTCONTROL 未设置,或不包含有效值,则 shell 解析器读取的所有行都保存在历史列表中,受制于 HISTIGNORE 的值。不测试多行复合命令的第二行和后续行,并且无论 HISTCONTROL 的值如何都将其添加到历史记录中。

所以把下面这行放在你的~/.bashrc

export HISTCONTROL=ignoreboth:erasedups

  • 不要忘记在更新 bash 配置文件/rc 文件后运行它们 - `source ~/.bashrc && source ~/.bash_profile` (3认同)

Oli*_*Oli 33

把这个放在你的~/.bashrc

export HISTCONTROL=ignoredups
Run Code Online (Sandbox Code Playgroud)

您可以改为使用ignoreboth. 这是ignorespaces(以空格开头的命令)和ignoredups(重复)的简写。

我更喜欢ignoredups它自己,因为我发现当我从网站上复制命令时忽略前面带有空格的命令的默认行为很烦人,并且它没有被保存,因为我也无意中复制了一个空格......但是各有千秋。

  • @karthick87 引用自另一个答案:*`ignoredups` 的值会导致匹配前一个历史条目的行不被保存*。它只删除连续的相同行。 (7认同)
  • 仍然存在重复项..可能是什么问题??http://imgur.com/fXeLQ.png (5认同)

小智 15

Putting this in ~/.bashrc will apply @alvin's solution across different sessions as wlell

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
Run Code Online (Sandbox Code Playgroud)

Source: Linux: Bash history: “ignoredups” and “erasedups” setting conflict with common history across sessions