HISTIGNORE在zsh中不起作用

6

我已经添加了

export HISTIGNORE="ls:cd:pwd:exit:cd .."

添加到我的.zshrc文件中。

已删除.zsh_history并重新启动终端,但仍无法忽略这些命令。

在此输入图片描述

1个回答

13

zsh shell 不使用 HISTIGNORE 环境变量,而是有一个 HISTORY_IGNORE 环境变量。

zshparam 手册中可知:

HISTORY_IGNORE

如果设置了该变量,在历史文件写入时会将其当作模式进行处理。与模式匹配的任何潜在历史条目都将被跳过。例如,如果该值为 fc *,则调用交互式历史记录编辑器的命令永远不会被写入历史文件。

请注意,HISTORY_IGNORE 定义了一个单一的模式:要指定备选项,请使用 (first|second|...) 语法。

因此,在您的情况下,您需要执行以下操作:

HISTORY_IGNORE="(ls|cd|pwd|exit|cd ..)"

或类似的东西。

请注意,这只影响写入历史文件的历史记录,而不是当前活动的shell会话中的历史记录,据我所见。


似乎还是不起作用。我正在使用 .oh-my-zsh,不知道是否会改变这些变量。我正在跟随这个人的例子 https://github.com/bradp/dotfiles/blob/master/sourced/exports这就是为什么我认为它会那样工作的原因。但我现在不确定了。 - tgreen
SAVEHIST 设置为正数,确保 HISTFILE 设置为历史文件的名称,并将 HISTORY_IGNORE 设置为 "(cd|ls)",无论如何都可以像 zsh 手册所述那样正常工作。 - Kusalananda
1
谢谢你,Kusalananda。我认为你是正确的。我想并希望这样做可以阻止在运行“history”或按上箭头键时显示那些命令。虽然它们不在历史文件中,所以我猜它是有效的。 - tgreen
1
@kev 这将是一个通配符模式,而不是正则表达式。 - Kusalananda
3
@Saftever 是的,但是如果您将 HISTORY_IGNORE 设置为 "(cd|ls)*",那么您还将淘汰任何以 cdls 开头的其他命令,因此您可能需要使用 "(cd|cd *|ls|ls *)", 或者 "(cd(| *)|ls(| *))" - Kusalananda
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接