有什么方法可以防止将命令添加到您的历史记录中?


64

有什么方法可以防止将命令添加到您的历史记录中?我有一个命令要保留在历史记录文件中,并且当我搜索存储在内存中的历史记录时,我真的不在乎将其保存在该文件中,尽管这没什么大问题。有什么方法可以防止这种情况,还是我只需要返回并编辑历史文件。

更新:我没有意识到这可能是特定于外壳的。我的壳是zsh。欢迎您回答其他外壳程序,以便人们知道如何在其外壳程序中执行此操作。


Answers:


51

在ZSH中

首先插入setopt HIST_IGNORE_SPACE到你的~/.zshrc。现在,再次登录后,您可以在历史记录中不想存储的任何命令加上前缀space

用户手册中,可以使用以下3个选项来表示某些行根本不应该进入历史记录:

  • HIST_IGNORE_SPACE不存储带有空格前缀的命令
  • HIST_NO_STORE不存储历史记录fc -l)命令
  • HIST_NO_FUNCTIONS不存储函数定义

@mmckinst答案是否有可能在zsh中工作?或类似的东西?或任何包含该命令的命令| somecommand
xenoterracide 2011年

AFAIK在zsh中没有bash的HISTIGNORE。
dogbane

@xeno zsh提供了一个可用于此的钩子函数preexec。如果返回非零,则命令不会保存在历史记录中。
基思

1
为了让zsh忽略一堆基本的常用命令,我对它们全部使用了别名,以便在前面留一个空格...对于c(ls fg bg作业退出clear reset);做别名$ c =“ $ c”; 完成
Will Norris

4
对于像我这样懒惰的未来读者,他们还不知道该怎么做:setopt HIST_IGNORE_SPACE~/.zshrc
Al.G.

25

如果您一遍又一遍地运行命令,则可能要使用Shell的历史记录忽略功能。假设您有ssh到的secret.server.com,FTP文件等,您不想保存任何提及secret.server.com的行:

bash你会

HISTIGNORE="*secret.server.com*"

而在zsh参数中被称为

HISTORY_IGNORE="*secret.server.com*"

您可以列出多个模式,并用冒号分隔它们。请注意,每个模式都与完整的输入行匹配,因此您可能需要添加*。例如,以下内容将从fortune历史记录中排除,但将存储fortune -l

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

如果设置了HISTIGNORE,则与您列出的模式不匹配的内容都不会保存到.bash_history/,.zsh_history并且即使向上箭头键(通常会调用您先前的命令)也无法保存(如果它与您的模式匹配)。


3
这有可能在zsh中起作用吗?
xenoterracide 2011年

是否有选项可以仅忽略以财富开头的行。想HISTIGNORE="^fortune*"忽略fortune -l但保留myfortune吗?
Bernhard

@xenoterracide可以,但是参数的命名不同。我只是将其编辑为答案。
n.st

23

在bash中,使用HISTCONTROL变量。

将其设置为HISTCONTROL=ignorespace(或HISTCONTROL=ignoreboth)。从现在开始,当您使用空格开头的行时,它将不会保存在历史记录中。这样可以避免在某些配置文件中包含“不公开”命令。

即使那样,它也会忘记添加空间,然后又想返回。要删除历史记录中的条目,请使用history -d <index>,将index其与在history命令中找到的数字一起使用(第一列)。


1
这在起作用zsh吗?
Gert

11

一次性的最简单方法是

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

其中,$代表初始外壳$$的提示符,代表子外壳的提示符。这适用于bash和zsh;在ksh中,您需要HISTFILE=/notwritable代替。请注意,重要的HISTFILE是写入历史文件时的值,而不是运行命令时的值。Bash,ksh和zsh退出时会写入历史文件(zsh可以更频繁地执行此操作,具体取决于配置)。

或者,您可以让bash或zsh忽略与某些模式匹配的行(其他答案已对此进行了介绍)。

zsh中的另一种可能性是

% fc -p
% secret-command
% fc -P

fc -p将当前历史记录列表压入堆栈,并启动一个与保存文件无关的新历史记录。fc -P将未保存的历史记录从堆栈中弹出,然后完全忘记它。

在进程运行时,命令及其参数(在某些系统上还包括其环境)将显示在进程表(ps输出)中。根目录可以查看系统记帐数据库中的过去命令,并且可以在无需您控制的情况下进行更多日志记录。而且可能会有各种法医证据可以大致显示您运行了什么命令(例如文件修改时间)。因此,对于确定的窃听者,您不会获得隐私权。

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.