如何防止命令显示在bash历史?
有时,当我运行像rm -rf XYZ
这样的命令时,我不希望将它logging在bash历史logging中,因为我可能不小心通过reverse-i-search
再次运行相同的命令。 有没有防止这种情况发生的好方法?
如果您已将HISTCONTROL
环境variables设置为ignoreboth
(通常默认设置),则具有前导空格字符的命令将不会存储在历史logging中(以及重复项)。
例如:
$ HISTCONTROL=ignoreboth $ echo test1 $ echo test2 $ history | tail -n2 1015 echo test1 1016 history | tail -n2
这是什么man bash
说:
HISTCONTROL
一个以冒号分隔的值列表,控制如何将命令保存在历史列表中。 如果值列表包含
ignorespace
空间,则以空格字符开头的行不会保存在历史logging列表中 。ignoredups
的值会导致与以前的历史logging匹配的行不被保存。ignoreboth
的值是ignorespace
和ignoredups
简写。erasedups
的值会导致在保存该行之前,将所有与当前行匹配的以前的行从历史列表中删除。 不在以上列表中的任何值都将被忽略。 如果未设置HISTCONTROL
或未包含有效值,则shellparsing器读取的所有HISTIGNORE
保存在历史logging列表中,取决于HISTIGNORE
的值。 多行复合命令的第二行和后续行不进行testing,并添加到历史logging,而不pipeHISTCONTROL
的值。
也可以看看:
- 为什么bash不存储以空格开头的命令? 在unix SE
- 为什么bash有一个HISTCONTROL =忽略空间选项? 在unix SE
在你的.bashrc / .bash_profile /你想要的地方,把export HISTIGNORE=' *'
。 然后,只需要开始任何你想要忽略的命令。
$ ls # goes in history $ ls # does not
更好的使用HISTIGNORE
。 这允许您指定一组要忽略的模式(如rm
)。 更好(我认为),而不是只是将所有历史loggingpipe理到/dev/null
你可以做两件事之一:
export HISTFILE=/dev/null
或者,用一个空格开始命令。
要么
unset HISTFILE
(与之前的回答类似,只是更短一些:export HISTFILE = / dev / null)
在shell启动时,我明确地清除了我不想在那里的条目的历史logging。 例如,我不想在历史中使用任何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