我试图忽略一些敏感命令,使其不被保存在 zsh 的历史文件中。
HISTSIZE=1000 # 1000 lines of history within the shell
SAVEHIST=1000 # 1000 lines of history in $HISTFILE
HISTFILE=${HOME}/.zsh_history # Save history to ~/.zsh_history
## Ignore save in $HISTFILE, but still in the shell
HISTORY_IGNORE='([bf]g *|cd ..|l[a,l,s,h,] *|less *|vi[m,] *)'
但它仍然显示在历史文件中:
% rm .zsh_history
% ls
Desktop Documents Downloads Music peda Pictures Public Templates Videos
% l
Desktop/ Documents/ Downloads/ Music/ peda/ Pictures/ Public/ Templates/ Videos/
% cat .zsh_history
ls
l
cat .zsh_history
我已经阅读参数页面,但它没有帮助。
该部分l[a,l,s,h,] *
正确吗?
答案1
l[a,l,s,h,] *
不匹配,l
因为[]
不是要扩展为的逗号分隔列表 - 这是括号扩展的语法。[...]
,与[a,l,s,h,]
相同,[alsh,]
并不意味着任何alsh
或什么都没有。 您需要l[alsh]#
。
对于ls
,空格似乎破坏了这种匹配,即使其后的所有内容都是可选的。因此在实践中,这似乎ls
只有在带有参数时才会被忽略:
~ ls foo
ls: cannot access 'foo': No such file or directory
~ tail ~/.histfile
HISTORY_IGNORE='([bf]g *|cd ..|l[a,l,s,h,]*|less *|vi[m,] *)'
l
tail ~/.histfile
l
tail ~/.histfile
看来您*
也需要做出可选的:
HISTORY_IGNORE='([bf]g *|cd ..|l[alsh]#( *)#|less *|vim# *)'