有时,当我运行命令时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导致与先前历史记录条目匹配的行的值 不被保存.值ignoreboth是ignorespace和的简写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)
你可以做以下两件事之一:
export HISTFILE=/dev/null
Run Code Online (Sandbox Code Playgroud)
或者,用空格开始命令.
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)