Answers:
要在历史记录中不保存单个命令,只需在其前面加上一个空格(在␣
此处标记为):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
此行为在~/.bashrc
文件中设置,即在以下行中设置:
HISTCONTROL=ignoreboth
man bash
说:
HISTCONTROL用
冒号分隔的值列表,用于控制如何在历史记录列表中保存命令。如果值列表包含 ignorespace, 则以空格字符开头的行不会保存在历史记录列表中。忽略的值将 导致不保存与上一个历史记录条目匹配的行。ignoreboth的值 是ignorespace和ignoreups的简写。
ignoredups
顺便说一下,这就是为什么history | tail -n2
在上述测试的历史记录中仅出现一次的原因。
终端的历史记录保存在RAM中,并~/.bash_history
在关闭终端后立即刷新到您的终端中。如果要从中删除特定条目,~/.bash_history
可以使用sed
:
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
在上一个中,我将默认定界符/
更改_
为在搜索词中使用的默认定界符,实际上,它等于sed -i '/\/path\//d' .bash_history
。如果该命令仅输出要删除添加的线路-i
选择和改变!d
,以d
执行删除操作:
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere
一种方法是设置HISTIGNORE
环境变量。从man bash
HISTIGNORE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. Each pattern is
anchored at the beginning of the line and must match the com‐
plete line (no implicit `*' is appended). Each pattern is
tested against the line after the checks specified by HISTCON‐
TROL are applied.
[FWIW,它是HISTCONTROL
提供“前面输入空格”解决方法的默认设置]。
因此,例如
HISTIGNORE='history -d*'
如果您希望它具有持久性,请从 ~/.bashrc
export HISTIGNORE='history -d*'
我通常使用:
history -w; history -c; $EDITOR $HISTFILE; history -r
将历史文件写入磁盘,在内存中清除,然后对其进行编辑以执行所需的操作,然后将已编辑的历史文件读回。
请注意,如果您的编辑器保存了备份文件,则顽皮的单词可能仍会出现在磁盘上。
使用的另一种选择-d
是使用预测历史数字:
startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239 # bad thing
17240 history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239 # good thing
17240 # other thing
17241 history | tail -n 3
在此示例中,我删除了不好的事情,删除了命令以获取历史记录编号,然后删除了用于删除历史记录的命令。一切都被消毒了。