在给定的 shell 上临时挂起 bash_history?

Naf*_*Kay 161 bash command-history

有没有办法在 bash 中暂时暂停历史跟踪,从而进入一种“隐身”模式?我正在我的终端中输入一些我不想记录的敏感财务信息。

Sie*_*geX 225

这应该是你要找的:

unset HISTFILE
Run Code Online (Sandbox Code Playgroud)

man bash

如果未设置 HISTFILE,或者历史文件不可写,则不会保存历史。

或者,如果您想将其关闭然后重新打开,使用它可能更容易set

关掉

set +o history
Run Code Online (Sandbox Code Playgroud)

打开

set -o history
Run Code Online (Sandbox Code Playgroud)

  • `HISTFILE` 的值只在 bash 退出时检查,所以第一种方法不能正常工作(如果恢复该值,该命令将被保存)。`set +o history` 确实按指示工作。 (21认同)
  • 谢谢,优秀。当我在做秘密事情时,我将使用 `set +o history` 和 `set -o history` 来回切换;) (7认同)
  • 作为提示,如果您在命令前放置一个空格(以空格开头的命令),它将不会记录在您的历史记录中,并且向上/向下箭头键也不会显示它。 (7认同)
  • `unset HISTFILE` 不起作用。`set -/+o history` 很有魅力!谢谢 (2认同)

for*_*sck 41

使用 bash,设置HISTCONTROL="ignorespace"您不希望记录在历史记录中的任何命令并在其前面加上空格。如果您忘记采取任何措施,还history -d <number>可以删除特定条目或history -c清除整个命令历史记录。


Gil*_*il' 27

确保HISTCONTROL包含ignorespace. 您可能想要将HISTCONTROL=ignorespace(或HISTCONTROL=ignoredups:ignorespace或其他)添加到您的~/.bashrc. 然后任何以空格开头的命令行都会从历史记录中省略。

另一种可能性是启动一个不保存其历史记录的新 bash 会话。

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell
Run Code Online (Sandbox Code Playgroud)


ImH*_*ere 8

如果您需要避免存储多个命令,并且仍想使用向上箭头访问以前的命令,请使用:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$
Run Code Online (Sandbox Code Playgroud)

有四种方式(级别)来控制命令的存储方式。

  1. 第一个也是最简单的是使用ignorespace(或忽略两者):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"
    
    Run Code Online (Sandbox Code Playgroud)

    这将允许在您想要避免被记录在history. 并且,因此,由于内存中没有记录可以发送到文件的命令,也将避免将一个命令发送到$HISFILE.

  2. 避免将命令记录到以下文件中$HISTFILE

    $ unset HISTFILE
    
    Run Code Online (Sandbox Code Playgroud)

    如果未设置,则在 shell 退出时不会保存命令历史记录。

    NullHISTFILE=''和/或设置为HISTFILE=/dev/null相同的效果。了解命令仍在记录到内存列表,尝试history命令或向上箭头。

    警告:如果在 shell 存在之前重置 HISTFILE,则无论如何都可以将所有记录在内存中的内容写入文件。

  3. 避免将命令记录到内存中的历史列表中。并且,由于不在内存中,无法记录到文件中。

    $ shopt -ou history              # or set +o history
    
    Run Code Online (Sandbox Code Playgroud)

    使用shopt -os history(或set -o history)重新启用

  4. 从内存中的历史列表中删除所有命令:

    $ HISTSIZE=0
    
    Run Code Online (Sandbox Code Playgroud)

    所有命令都会被擦除(从内存中),因此任何东西都不能存储到文件中,当然,直到变量再次设置为某个有效的数值。