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

我的历史记录中一次又一次列出了相同的命令。 我怎么能避免这个? 我知道这可能是通过HISTCONTROL但我找不到正确的方法。

bash手册页:

HISTCONTROL

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

所以在~/.bashrc以下行:

export HISTCONTROL=ignoreboth:erasedups

把它粘在你的~/.bashrc

 export HISTCONTROL=ignoredups 

你可以改用ignoreboth 。 这是对ignorespaces (以空格开头的命令)和ignoredups (duplicates)的ignoredups

我更喜欢自己忽略ignoredups ,因为我发现当我从网站上复制一个命令时忽略前面带空格的命令的默认行为非常烦人而且因为我不小心复制在空间中而没有保存….但是每个人都有自己的。

将它放在~/.bashrc中将在不同的会话中应用@ alvin的解决方案

 HISTCONTROL=ignoredups:erasedups shopt -s histappend PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND" 

来源: Linux:Bash历史记录:“ignoredups”和“erasedups”设置与跨会话的共同历史冲突

 export HISTCONTROL=erasedups 

将以下内容添加到~/.bashrc

 export HISTCONTROL=ignoredups 

为此,您可以使用此命令:

 nano ~/.bashrc 

要唯一地记录每个新命令是棘手的。 首先,您需要添加到~/.profile或类似的:

 HISTCONTROL=erasedups PROMPT_COMMAND='history -w' 

然后你需要添加到~/.bash_logout

 history -a history -w