执行命令时不保留历史记录

我想执行一些命令,但不想将它们存储在命令历史记录中。因此没有人能够在.bash_history文件中搜索它们。

是否有一种方法可以这样执行Bash命令?

136408 次浏览

以空格开始命令,它将不会包含在历史记录中。

注意,这需要设置环境变量$HISTCONTROL

  • 检查以下命令是否返回ignorespaceignoreboth: < / p >

     echo $HISTCONTROL
    
  • 如果缺少环境变量,可以在Bash概要文件中添加下面的行。例如,文件%HOME/.bashrc

     export HISTCONTROL=ignorespace
    

采购配置文件之后,以空格前缀的命令将不会被写入$HISTFILE

在任何给定的Bash会话中,输入以下命令将历史文件设置为/dev/null:

export HISTFILE=/dev/null

注意,正如注释中指出的那样,这不会将会话中的任何命令写入历史记录!

请不要搅乱系统管理员的辛勤工作;)

新出品的解决方案更优雅。简单地取消设置变量:unset HISTFILE(谢谢!)

有几种方法可以实现这一点。这将历史文件的大小设置为0:

export HISTFILESIZE=0

这将历史文件设置为/dev/null,有效地禁用它:

export HISTFILE=/dev/null

对于单个命令,您可以在命令前面加上一个空格,这样它就不会保存在历史文件中。注意,这要求你在$HISTCONTROL环境变量中包含ignorespace值(man bash并搜索ignorespace以获得更多详细信息)。

您可以考虑使用没有历史记录的shell,例如maybe

/bin/sh << END
your commands without history
END

(也许/bin/dash/bin/sash/bin/sh更合适)

或者更好,使用批处理实用程序,例如:

batch << EOB
your commands
EOB

历史记录将包含shbatch,这不是很有意义。

还可以使用以下命令:

echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')

我认为这是一个非常方便的命令。

如果您想删除所有历史记录,包括删除所有历史记录的事实,这是很方便的!

rm .bash_history;export HISTFILE=/dev/null;exit
echo "discreet";history -d $(history 1)

John Doe的Cédric罗耶的答案的扩展。但是,这似乎对我有用。

<your_secret_command>; history -d $((HISTCMD-1))

您不应该在历史记录中看到该命令的条目。

下面是解释……

'history -d'从历史记录中删除所提到的条目。

HISTCMD存储下一个要执行的命令的command_number。因此,(HISTCMD-1)指的是最后执行的命令。

从Bash历史文件中删除某一行

正如前面提到的来自Doodad的评论unset HISTFILE很好地做到了这一点,但如果你还想删除一些历史记录,可以执行echo $HISTFILE来获取历史文件的位置(通常是~/.bash_history), unset HISTFILE,并编辑~/.bash_history(或任何HISTFILE -当然它现在是unset,所以你不能读取它)。

$ echo $HISTFILE       # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history   # Or your preferred editor

那你就编辑了你的历史,还有你编辑历史的事实!

你可以用

export HISTFILE=/dev/null ;history -d $(history 1)

那就继续你的鬼把戏吧。将histfile设置为/dev/null将被记录到历史文件中,但该条目将被轻松删除,并且不会显示任何痕迹(至少在历史文件中)。

而且,这是非永久性的。

如果你正在使用Z shell (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."'

这个命令可能会派上用场。这将不会记录所执行的命令

history -d $((HISTCMD-1)) && <Your Command Here>

你只需要运行:
$ set +o history < / p >

要查看更多信息,请执行:
$ man set < / p >