如何防止命令显示在Bash历史记录中?


93

有时,当我运行诸如之类的命令时rm -rf XYZ,我不希望将此信息记录在Bash历史记录中,因为我可能会偶然地再次运行同一命令reverse-i-search。有防止这种情况发生的好方法吗?



尽管bash 可以用于编写Shell脚本(因此进行编程),但是它的这一特定方面与编程完全无关(历史是仅用于交互的内容)。投票关闭。
paxdiablo

Answers:


110

如果您将HISTCONTROL环境变量设置为ignoreboth(通常是默认设置),则带有前导空格字符的命令将不会存储在历史记录中(以及重复项)。

例如:

$ HISTCONTROL=ignoreboth
$ echo test1
$  echo test2
$ history | tail -n2
 1015  echo test1
 1016  history | tail -n2

内容如下man bash

历史控制

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

也可以看看:


51

在您的.bashrc / .bash_profile /想要的任何地方,放入export HISTIGNORE=' *'。然后,只用一个空格开始您要忽略的任何命令。

$ ls  # goes in history
$  ls # does not

4
这取决于HISTCONTROL环境变量的值,该值不一定已ignorespace设置。
sorpigal 2011年

3
如果HISTCONTROL包含ignorespace,则实际上只在其中包含`*`是多余的HISTIGNORE。两者独立运行。
chepner

22

更好的使用HISTIGNORE。这使您可以指定一组要忽略的模式(例如rm)。(我认为)总比将所有历史记录传送到更好/dev/null


啊,是的,忘了那个:)
Corey Henderson

13
kill -9 $$

我知道这不如先前的答案那么好,但是这会杀死当前的Bash shell而不会保存任何内容,这在默认情况下未设置HISTCONTROL,您忘记设置它,或者纯粹又简单地忘记了放置前导空格时很有用并且您只是输入了一些密码,并且不希望它们永久保留在历史记录中。

这是一种快速的方法,并且删除历史文件之类的东西不太好,因为您需要在保存历史的Shell之外进行操作(以其他用户身份登录并使用su / sudo,创建后台作业等)。


8

您可以执行以下两项操作之一:

export HISTFILE=/dev/null

或者,以空格开头的命令。


5
一个很棒的空间
Eric Fortis

8
我们中的一些人认为自动忽略以空格开头的命令是一个糟糕的主意,因此ignorespace默认情况下未设置。
sorpigal 2011年

3
设置HISTFILE这种方式可以防止存储任何历史记录,也不会阻止将命令添加到内存中的历史记录中。
chepner

3

要么

unset HISTFILE

(类似于前面的答案,只是简短一点:export HISTFILE = / dev / null)


1
这仅影响磁盘上的历史记录,而不影响内存中的历史记录。
chepner

2

在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.