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


Answers:


37

使用HIST_IGNORE_SPACE选项。

setopt HIST_IGNORE_SPACE

男性购物

HIST_IGNORE_SPACE

当行中的第一个字符为空格,或者其中一个扩展别名包含前导空格时,请从历史记录列表中删除命令行。请注意,该命令会一直保留在内部历史记录中,直到输入下一条命令消失为止,从而使您可以短暂地重复使用或编辑该行。如果要使其消失而无需输入其他命令,请键入一个空格,然后按回车键。


我希望我可以在OSX上自终端窗口打开以来输入的所有命令执行此操作。因为当您意识到自己一直在树错树皮时。
Dan Rosenstark

2
然后,对于我想防止的命令,我使用了别名并在其前面添加了一个空格:alias jrnl =“ jrnl”
Sagar Jauhari 2014年

2
@Yar杀死该外壳程序的-9(如果它不执行每行历史记录文件的写操作)
Michael Shigorin

1
@MichaelShigorin谢谢!kill -9 $$确实要避免将当前终端会话中发出的所有命令都存储在历史记录中,这真是太棒了。
Jeffrey Lebowski

2
@CMCDragonkai您可以unset HISTFILE在执行命令块之前。之后,您需要重置HISTFILE或打开新的外壳程序,以将命令保留在所需的历史记录中。
昌西·加勒特

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 zshoptsHIST_IGNORE_SPACE仍然存在:

请注意,该命令会一直保留在内部历史记录中,直到输入下一条命令消失为止,从而使您可以短暂地重复使用或编辑该行。

因此,要对其进行测试,您将不得不付出额外的努力[Enter]。这样既可以从的输出中删除命令history,也可以从↑箭头历史记录中删除该命令。

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.