执行命令而不将其保留在历史记录中

时间:2011-12-12 10:48:21

标签: linux bash unix

我想执行一些命令,但不想将它们存储在命令历史记录中。这样任何人都无法在.bash_history文件中搜索它。

有没有办法以这种方式执行bash命令?

13 个答案:

答案 0 :(得分:250)

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

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

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

    #> echo $HISTCONTROL
    
  • 要添加环境变量(如果缺少),可以使用以下行 添加到bash配置文件中。例如。 %HOME/.bashrc

    export HISTCONTROL=ignorespace
    

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

答案 1 :(得分:50)

在任何给定的bash会话中,通过键入:

将历史文件设置为/ dev / null
  

export 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)引用最后执行的命令。

https://superuser.com/a/529193

答案 4 :(得分:10)

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

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

(可能/bin/dash/bin/sash可能比/bin/sh更合适

甚至更好地使用batch实用程序,例如

batch << EOB
   your commands
EOB

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

答案 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