如何防止 zshell 中的命令被保存到历史记录中?

如何防止 zshell 中的命令被保存到历史记录中?

在 Bash 中,我知道在命令前放置一个空格会阻止它被保存在历史记录中,那么 zshell 的等效功能是什么?

答案1

使用 HIST_IGNORE_SPACE 选项。

setopt HIST_IGNORE_SPACE

手册 zshoptions

HIST_IGNORE_SPACE

当命令行的第一个字符是空格,或者其中一个扩展别名包含前导空格时,从历史记录列表中删除命令行。请注意,命令会保留在内部历史记录中,直到输入下一个命令后才会消失,这样您就可以短暂地重复使用或编辑该行。如果您想让它立即消失而不输入其他命令,请键入空格并按回车键。

答案2

如果你希望更精细地控制添加到 ZSH 历史记录的内容,则可以zshaddhistory在 中定义该函数.zshrc。以下定义使用正则表达式来定义要忽略的模式:

function zshaddhistory() {
  emulate -L zsh
  if ! [[ "$1" =~ "(^ |^ykchalresp|--password)" ]] ; then
      print -sr -- "${1%%$'\n'}"
      fc -p
  else
      return 1
  fi
}

man zshopts请注意,下面的行为HIST_IGNORE_SPACE仍然存在:

请注意,该命令会保留在内部历史记录中,直到输入下一个命令后才会消失,这样您就可以短暂地重复使用或编辑该行。

因此,要测试它,您必须额外点击[Enter]。这会从 的输出history以及 ↑ 箭头历史记录中删除该命令。

请参阅此插件以保存日志条目,但根据正则表达式屏蔽敏感数据:https://github.com/jgogstad/passwordless-history

相关内容