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

Jan*_*cak 184 unix linux bash

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

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

u-p*_*nkt 271

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

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

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

  • 除非在$ HISTCONTROL中包含ignorespace,否则这不起作用 - 尽管这可能是大多数系统的默认设置. (17认同)
  • 正确.有关更多详细信息,OP应该在bash手册页中查看HISTCONTROL和HISTIGNORE. (2认同)
  • http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/ - 这里提供了更多bash历史提示,包括从历史中隐藏命令的方法 (2认同)

Miq*_*uel 50

在任何给定的bash会话中,通过键入以下内容将历史文件设置为/ dev/null:

export HISTFILE =/dev/null

请注意,正如评论中所指出的,这不会将该会话中的任何命令写入历史记录!

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

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

  • 这导致我在注销时将`/ dev/null`权限设置为0600相关的问题.相反,我使用了`unset HISTFILE`. (12认同)
  • 这将阻止记录*all*命令.这不是提问者想要的. (5认同)

小智 32

echo "discreet";history -d $(history 1)
Run Code Online (Sandbox Code Playgroud)

  • 哦,按命令控制?尼斯. (3认同)
  • 这在“zsh”中不起作用。它输出“fc:太多参数”并将命令存储在历史记录中。 (2认同)

小智 16

@John Doe和@ user3270492答案的延伸.但是,这似乎对我有用.

<your_secret_command>; history -d $((HISTCMD-1))
Run Code Online (Sandbox Code Playgroud)

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

这是解释..

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

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

https://superuser.com/a/529193


Bas*_*tch 10

您可能会考虑使用没有历史记录的shell

/bin/sh << END
   your commands without history
END
Run Code Online (Sandbox Code Playgroud)

(也许/bin/dash或者/bin/sash可能更合适/bin/sh)

甚至更好地使用批处理实用程序,例如

batch << EOB
   your commands
EOB
Run Code Online (Sandbox Code Playgroud)

那么历史将包含shbatch不具有意义


Chr*_*ian 7

你可以开始你的会议

export HISTFILE=/dev/null ;history -d $(history 1)
Run Code Online (Sandbox Code Playgroud)

然后继续你的偷偷摸摸的行为.将histfile设置为/dev/null将记录到历史文件中,但此条目将很容易删除,并且不会显示任何跟踪(至少在历史文件中).

此外,这是非永久性的.

  • 但现在这个线程真是一团糟!在这种情况下,特别是对于这样一个老问题,我相信最好编辑已经存在的好的答案,和/或留下评论...... (2认同)

Rot*_*eti 7

如果您使用的是Z shell ( zsh),您可以运行:

setopt histignorespace
Run Code Online (Sandbox Code Playgroud)

设置后,每个以空格开头的命令都将从历史记录中排除。

您可以使用别名.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."'
Run Code Online (Sandbox Code Playgroud)


drk*_*gel 5

正如Doodad 在评论中提到unset HISTFILE这样做很好,但如果您还想删除一些历史记录,请执行echo $HISTFILE获取历史记录文件位置(通常~/.bash_historyunset HISTFILE、 和编辑~/.bash_history(或其他任何内容HISTFILE- 当然现在unset这样您就可以了)不读)。

$ echo $HISTFILE       # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history   # Or your preferred editor
Run Code Online (Sandbox Code Playgroud)

然后您编辑了您的历史记录,以及您编辑它的事实!