暂时在给定的shell上暂停bash_history?


114

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

Answers:


153

这应该是您要寻找的:

unset HISTFILE

man bash

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

另外,如果您要先将其关闭然后再重新打开,则可能更易于使用set

关掉

set +o history

打开

set -o history

11
HISTFILE仅当bash退出时才检查的值,因此第一种方法不能按原样工作(如果还原该值,则将保存命令)。set +o history确实按照指示工作。
吉尔斯

5
谢谢,太好了。当我做秘密的事情时,我将使用set +o historyset -o history来回切换;)
Naftuli Kay 2011年

1
unset HISTFILE不起作用。 set -/+o history奇迹般有效!谢谢
kholofelo Maloma 2015年

4
提示:如果在命令前放置一个空格(以空格开头的命令),该空格将不会记录在您的历史记录中,并且向上/向下箭头键也不会显示该空格。
Mahdi'7

1
仅取消设置HISTFILE不会擦除内存中的命令列表(尝试history查看它)。如果另外这样做,HISTSIZE=0该列表将被删除,并且无法将任何命令存储到文件中(因为不会记住任何命令)。
以撒

33

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


27

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

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

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

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

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

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

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

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    这样可以在要避免记录在的内存列表中的命令之前使用空格history。因此,由于在内存中没有记录可发送到文件的命令,因此也将避免将一个命令发送到中列出的文件$HISFILE

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

    $ unset HISTFILE

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

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

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

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

    $ shopt -ou history              # or set +o history

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

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

    $ HISTSIZE=0

    (从内存中)所有命令都将被擦除,因此,毫无疑问,什么也不会存储到文件中,直到将变量再次设置为某个有效的数值为止。


//,它在一个方便的页面中涵盖了@Ambrose以外的所有答案。要走的路,@ Isaac。您愿意为此添加一个或两个指向文档的链接吗?可以肯定的man history是,对于我们大多数人来说,都不会削减它。
弥敦道(Nathan Basanese)

1
@NathanBasanese展开。更好?
艾萨克(Isaac)

//,是的!我假设这些来自Bash变量Shopt内置文档是否正确?
内森·巴萨内塞

//,另外,虽然我读的是bash的变量文件,我碰到了HISTIGNORE,其中subsumes的功能HISTCONTROL
弥敦道(Nathan Basanese)'18 -10-17

(假设您使用的是Linux):如果执行命令会发生什么LESS=+'/^ *HISTI' man bash(不是“手册页”吗?)。@NathanBasanese
Isaac

3

关闭历史记录有一种简单的方法,因此命令不会存储在.bash_history文件中。

您必须将空格或制表符放在任何命令的前面,以便该命令不会存储在历史记录中。例如:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

pwd命令将不会存储在历史记录中,因为它的前面有空格。


这行不通;Bash抱怨找不到“-”或“ -history”或其他带连字符的命令。
Samuel A. Falvo II

2
除非HISTCONTROL =“ignorespace”这不会工作在forcefsck的回应设定为
DeveloperChris

1
export HISTFILE=/dev/null 

那是我的后路。万一未设置的HISTORY / HISTFILE / HISTCONTROL等无法正常工作,将其导出到/ dev / null总是对我有用。


要暂时暂停历史记录?作为常规命令,这对我不起作用。后续命令已记录到历史记录。您是用.bash_profile还是脚本来调用它?GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat Gessel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.