执行命令,而不将其保存在历史logging中

我想执行一些命令,但不希望将它们存储在命令历史logging中。 所以没有人能够在.bash_history文件中search它。

有没有办法如何执行这样的bash命令?

用一个空格开始你的命令,它不会被包含在历史logging中。

请注意,这确实需要设置环境variables$HISTCONTROL

  • 检查以下命令是否返回ignorespaceignoreboth

     #> echo $HISTCONTROL 
  • 如果缺less环境variables,可以将以下行添加到bashconfiguration文件中。 例如%HOME/.bashrc

     export HISTCONTROL=ignorespace 

再次获取configuration文件后,空格前缀命令不会写入$HISTFILE

在任何给定的bash会话中,通过input以下命令将历史文件设置为/ dev / null:

导出HISTFILE = / dev / null

请注意,正如在注释中指出的那样,这不会在该会话中写入任何命令到历史!

请不要惹你的系统pipe理员的辛勤工作;)

[更新] @Doodad的解决scheme更优雅,只需取消设置variables: unset HISTFILE (谢谢!)

 echo "discreet";history -d $(history 1) 

@John Doe&@ user3270492的答案的延伸。 但是,这似乎为我工作。

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

你不应该在历史中看到命令的input。

这里的解释..

“history -d”从历史logging中删除提到的条目。

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

https://superuser.com/a/529193

也许可以考虑使用没有历史的shell

 /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') 

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

正如@Doodad在注释中提到的,未unset HISTFILE可以很好地完成这项工作,但是如果您还想删除一些历史logging,可以使用echo $HISTFILE来获取历史文件位置(通常为~/.bash_history ),然后unset HISTFILE ,然后编辑~/.bash_history (或任何HISTFILE是 – 当然它现在是未unset所以你不能读它)。

 $ echo $HISTFILE # eg ~/.bash_history $ unset HISTFILE $ vi ~/.bash_history # or your preferred editor 

那么你已经编辑了你的历史,以及你编辑它的事实!

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

 export HISTFILESIZE=0 

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

 export HISTFILE=/dev/null 

对于单个命令,您可以在命令前添加一个空格,而不会保存在历史文件中。 请注意,这需要您具有包含在$HISTCONTROL环境variables(man bash和searchignorespace以获取更多详细信息)中的ignorespace值。

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

 rm .bash_history;export HISTFILE=/dev/null;exit