有时,当我运行诸如之类的命令时rm -rf XYZ
,我不希望将此信息记录在Bash历史记录中,因为我可能会偶然地再次运行同一命令reverse-i-search
。有防止这种情况发生的好方法吗?
bash
可以用于编写Shell脚本(因此进行编程),但是它的这一特定方面与编程完全无关(历史是仅用于交互的内容)。投票关闭。
有时,当我运行诸如之类的命令时rm -rf XYZ
,我不希望将此信息记录在Bash历史记录中,因为我可能会偶然地再次运行同一命令reverse-i-search
。有防止这种情况发生的好方法吗?
bash
可以用于编写Shell脚本(因此进行编程),但是它的这一特定方面与编程完全无关(历史是仅用于交互的内容)。投票关闭。
Answers:
如果您将HISTCONTROL
环境变量设置为ignoreboth
(通常是默认设置),则带有前导空格字符的命令将不会存储在历史记录中(以及重复项)。
例如:
$ HISTCONTROL=ignoreboth
$ echo test1
$ echo test2
$ history | tail -n2
1015 echo test1
1016 history | tail -n2
内容如下man bash
:
历史控制
用冒号分隔的值列表,用于控制如何在历史记录列表中保存命令。如果值列表包括
ignorespace
,则以空格字符开头的行不会保存在历史记录列表中。值的值ignoredups
导致不保存与先前的历史记录条目匹配的行。的值ignoreboth
是ignorespace
和的简写ignoredups
。值erasedups
导致在保存该行之前将所有与当前行匹配的先前行从历史记录列表中删除。不在上面列表中的任何值都将被忽略。如果。多行复合命令的第二行和后续行未经测试,并且无论的值如何都添加到历史记录中。HISTCONTROL
未设置,或者不包含有效值,则由外壳解析器读取的所有行都将保存在历史记录列表中,但前提是HISTIGNORE
HISTCONTROL
也可以看看:
在您的.bashrc / .bash_profile /想要的任何地方,放入export HISTIGNORE=' *'
。然后,只用一个空格开始您要忽略的任何命令。
$ ls # goes in history
$ ls # does not
HISTCONTROL
环境变量的值,该值不一定已ignorespace
设置。
HISTCONTROL
包含ignorespace
,则实际上只在其中包含`*`是多余的HISTIGNORE
。两者独立运行。
您可以执行以下两项操作之一:
export HISTFILE=/dev/null
或者,以空格开头的命令。
ignorespace
默认情况下未设置。
HISTFILE
这种方式可以防止存储任何历史记录,也不会阻止将命令添加到内存中的历史记录中。
在Shell启动时,我从不想在其中的条目中明确清除了历史记录。例如,我不希望有任何rm -rf
历史记录(删除包含一整夜处理过的结果的目录后,会感到很痛苦,只需使用一个Arrow-Up
+号即可Enter
:)
我将以下代码片段放入了自己的init文件中(适用于.zshrc
,也应适用于.bashrc
)
# ...
HISTFILE=~/.zshhistory
# ...
# remove dangerous entries from the shell history
temp_histfile="/tmp/$$.temp_histfile"
grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile
mv $temp_histfile $HISTFILE