我想执行一些命令,但不想将它们存储在命令历史记录中。这样任何人都无法在.bash_history
文件中搜索它。
有没有办法以这种方式执行bash命令?
答案 0 :(得分:250)
使用空格开始命令,它不会包含在历史记录中。
请注意,这确实需要设置环境变量$HISTCONTROL
。
检查以下命令是否返回ignorespace
或
ignoreboth
#> echo $HISTCONTROL
要添加环境变量(如果缺少),可以使用以下行
添加到bash配置文件中。例如。 %HOME/.bashrc
export HISTCONTROL=ignorespace
再次获取配置文件后,空格前缀命令将不会写入$HISTFILE
答案 1 :(得分:50)
在任何给定的bash会话中,通过键入:
将历史文件设置为/ dev / nullexport HISTFILE = / dev / null
请注意,正如评论中所指出的,这不会将该会话中的任何命令写入历史记录中!
请不要弄乱你的系统管理员的辛勤工作;)
[更新] @Doodad的解决方案更优雅,只需取消设置变量:unset HISTFILE
(谢谢!)
答案 2 :(得分:30)
echo "discreet";history -d $(history 1)
答案 3 :(得分:15)
@John Doe& amp; @ user3270492的答案。但是,这似乎对我有用。
<your_secret_command>; history -d $((HISTCMD-1))
您不应该在历史记录中看到该命令的输入。
这里有解释..
&#39;历史-d&#39;删除历史记录中提到的条目。
HISTCMD存储下一个要执行的command_number。因此,(HISTCMD-1)引用最后执行的命令。
答案 4 :(得分:10)
您可以考虑使用没有历史记录的shell,例如
/bin/sh << END
your commands without history
END
(可能/bin/dash
或/bin/sash
可能比/bin/sh
更合适
甚至更好地使用batch实用程序,例如
batch << EOB
your commands
EOB
然后,历史记录将包含sh
或batch
,这不是很有意义
答案 5 :(得分:6)
您可以使用
开始会话export HISTFILE=/dev/null ;history -d $(history 1)
然后继续你的偷偷摸摸的行为。将histfile设置为/dev/null
将被记录到历史文件中,但此条目将很容易删除,并且不会显示任何痕迹(至少在历史文件中)。
此外,这是非永久性的。
答案 6 :(得分:4)
您还可以使用以下命令:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
我认为这是一个非常便携的命令
答案 7 :(得分:4)
正如@Doodad在评论中提到的,unset HISTFILE
做得很好,但如果您还要删除一些历史记录,请echo $HISTFILE
获取历史记录文件位置(通常{{1} }),然后~/.bash_history
,然后编辑unset HISTFILE
(或其他~/.bash_history
- 当然现在是HISTFILE
所以你无法阅读它。)
unset
然后你已经编辑了你的历史,以及你编辑它的事实!
答案 8 :(得分:2)
有几种方法可以实现这一目标。这会将历史记录文件的大小设置为0:
export HISTFILESIZE=0
这会将历史记录文件设置为/dev/null
,从而有效地禁用它:
export HISTFILE=/dev/null
对于单个命令,您可以在命令前添加空格,并且不会将其保存在历史记录文件中。请注意,这需要您在ignorespace
环境变量中包含$HISTCONTROL
值(man bash并搜索ignorespace
以获取更多详细信息)。
答案 9 :(得分:1)
如果您要删除所有历史记录,包括删除所有历史记录的事实,这很方便!
rm .bash_history;export HISTFILE=/dev/null;exit
答案 10 :(得分:1)
如果您使用 zsh ,则可以运行:
setopt histignorespace
设置完成后,将从历史记录中排除以空格开头的每个命令。
您可以在.zshrc
中使用别名来打开/关闭 :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
答案 11 :(得分:0)
此命令可能会派上用场。这不会记录已执行的命令
history -d $(((HISTCMD-1))&&
答案 12 :(得分:-1)
您只需要运行:
$ set +o history
要查看更多信息,请运行:
$ man set