我的历史记录中一次又一次列出了相同的命令。如何避免这种情况?我知道可以通过HISTCONTROL
但我没有找到正确的方法。
我的历史记录中一次又一次列出了相同的命令。如何避免这种情况?我知道可以通过HISTCONTROL
但我没有找到正确的方法。
Answers:
从bash
手册页:
历史控制
用冒号分隔的值列表,用于控制如何在历史记录列表中保存命令。如果值列表包含
ignorespace
,则以空格字符开头的行不会保存在历史记录列表中。值的值ignoredups
导致不保存与先前的历史记录条目匹配的行。的值ignoreboth
是ignorespace
和的 简写ignoredups
。值erasedups
使与当前行匹配的所有先前行在保存该行之前从历史记录列表中删除。不在上面列表中的任何值都将被忽略。如果未设置HISTCONTROL或不包含有效值,则由外壳解析器读取的所有行都将存储在历史记录列表中,但要遵循HISTIGNORE的值。多行复合命令的第二行和后续行未经测试,并且无论HISTCONTROL的值如何都添加到历史记录中。
因此,将以下行放入您的~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
大部分时间,如果.bashrc中被修改,它会工作,但认为并非如此所有的时间。
source ~/.bashrc && source ~/.bash_profile
将此贴在您的~/.bashrc
:
export HISTCONTROL=ignoredups
您可以改用ignoreboth
。这是ignorespaces
(以空格开头的命令)和ignoredups
(重复的)命令的简写。
我更喜欢ignoredups
单独使用,因为当我从网站上复制命令时,我发现默认行为是忽略了在前面带有空格的命令,这很烦人,并且由于我也无意间在空格中复制了命令而无法保存该命令。每个人自己的。
ignoredups
导致不保存与先前的历史记录条目匹配的行。它仅删除连续的相同行。
将其放入~/.bashrc
@alvin的解决方案将在不同的会话中应用为wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROL
而您的却不使用?有什么不同?它对我
export
使变量可用于子流程。stackoverflow.com/q/1158091/552621在的情况下HISTCONTROL
,PROMPT_COMMAND
等等,这些变量使用的外壳本身,所以也许它们导出(孩子处理)是没有必要的。