从存储在bash历史记录中排除某些命令


Answers:


53

您可能需要$HISTIGNORE:“冒号分隔的模式列表,用于决定应在历史记录列表中保存哪些命令行。” 〜/ .bashrc中的这一行应该可以完成此工作:

HISTIGNORE='rm *:svn revert*'

另外,您可以在命令的开头添加一个空格以将其从历史记录中排除。只要$HISTCONTROLcontains ignorespaceignoreboth,它就可以工作,这在我使用的任何发行版中都是默认的。


4
空间是我一直以来做到的方式。
罗布

我曾经不小心输入了extra y,毕竟cp(别名为cp -i)结束了。因此,我将别名yalias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'...,但是HISTIGNORE看起来更好。:) 谢谢。
13年

2
只是为了更加明确:你可以添加export HISTCONTROL="ignorespace"到您的~/.bashrc忽略用空格开始的命令。
艾丹·费尔德曼

@AidanFeldman在macOS上不是默认值
akauppi

注意:当我们在命令行输入而不是在HISTIGNORE中时,应该包含空格。
加安·维拉库蒂

6

尽管与OP的问题略有不同,但是当我有意不希望将命令存储在bash历史记录中时,我会在它们前面加上一个空格。在Ubuntu及其变体中均可使用,不确定是否在所有系统上均可使用。


6
取决于$HISTCONTROL(请参阅我的答案)。
l0b0

@ l0b0对,谢谢指出。
k4rtik 2012年

1

当我做了历史上我不想做的事情时,我通常会杀死我的bash实例。

kill -9 $$

$$表示当前进程-从shell运行bash时。您可以使用$ BASHPID,但是要输入更多的内容:-)


2
有些猛砸设置(如),将保存历史中的每个命令后,在这种情况下,这是不行的。
l0b0 2012年

1
我曾经这样做。但是设置HISTFILE=/dev/null是一个更好的选择。
13年

只能HISTFILE=在bash和ksh中使用。
kubanczyk '16

unset HISTFILE
Todd Walton
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.