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

bne*_*eil 45 zsh command-line linux-terminal

在 Bash 中,我知道在命令之前放置一个空格会阻止它被保留在历史记录中,zshell 的等价物是什么?

Dar*_*all 63

使用 HIST_IGNORE_SPACE 选项。

setopt HIST_IGNORE_SPACE
Run Code Online (Sandbox Code Playgroud)

男人 zshoptions

HIST_IGNORE_SPACE

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

  • 这对我不起作用,直到我阅读了整篇文章并意识到它比 bash 更棒!! (6认同)
  • 然后,对于我想阻止的命令,我使用了别名并添加了一个空格前缀:alias jrnl=" jrnl" (2认同)
  • @Yar kill -9 那个外壳(如果它不做每行历史文件写入) (2认同)
  • @CMCDragonkai 您可以在命令块之前“取消设置 HISTFILE”。之后您需要重置 `HISTFILE` 或打开一个新的 shell 以将命令保留在您想要的历史记录中。 (2认同)

小智 7

如果您希望对添加到 ZSH 历史记录的内容进行更精细的控制,您可以zshaddhistory.zshrc. 以下定义使用正则表达式来定义要忽略的模式:

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

请注意,从行为man zshoptsHIST_IGNORE_SPACE仍然存在:

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

所以要测试它,你必须点击一个额外的[Enter]. 这会从 的输出history以及 ? 箭头历史。