如何防止命令出现在bash历史记录中?

Jee*_*Kim 81 bash

有时,当我运行命令时rm -rf XYZ,我不希望将其记录在bash历史记录中,因为我可能会意外地再次运行相同的命令reverse-i-search.有没有好办法防止这种情况发生?

ken*_*orb 91

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

例如:

$ HISTCONTROL=ignoreboth
$ echo test1
$  echo test2
$ history | tail -n2
 1015  echo test1
 1016  history | tail -n2
Run Code Online (Sandbox Code Playgroud)

这是man bash说:

HISTCONTROL

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

也可以看看:


小智 46

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

$ ls  # goes in history
$  ls # does not
Run Code Online (Sandbox Code Playgroud)

  • 这取决于`HISTCONTROL`环境变量的值,它不一定具有`ignorespace`集. (4认同)
  • 如果`HISTCONTROL`包含`ignorespace`,那么在`HISTIGNORE`中包含`*`实际上是多余的.两者独立运作. (3认同)

bma*_*eny 20

更好用HISTIGNORE.这允许您指定一组要忽略的模式(例如rm).更好(我认为),而不仅仅是将所有历史记录在一起/dev/null


Cor*_*son 7

你可以做以下两件事之一:

export HISTFILE=/dev/null
Run Code Online (Sandbox Code Playgroud)

或者,用空格开始命令.

  • 我们中的一些人认为以空格为前缀的自动忽略命令是一个非常糟糕的主意,因此默认情况下没有设置`ignorespace`. (7认同)
  • 在那之前的空间很棒 (5认同)
  • 以这种方式设置“ HISTFILE”会阻止存储任何历史记录,并且不会阻止将命令添加到内存历史记录中。 (2认同)

THE*_*rer 7

kill -9 $$
Run Code Online (Sandbox Code Playgroud)

我知道这不如上面那么好,但这会杀死当前的bash shell而不保存任何东西,当默认情况下没有设置HISTCONTROL时很有用,你忘了设置它或纯粹而简单你忘了放一个领先的空间而你只是键入一些密码并且不希望它们永久保留在历史记录中,这是快速的方法,例如擦除历史文件不是那么好,因为您需要在历史保存shell之外执行它(以不同的用户身份登录)使用su/sudo,创建后台工作等)


小智 6

或者

unset HISTFILE
Run Code Online (Sandbox Code Playgroud)

(与之前的答案类似,只是更短:export HISTFILE=/dev/null)