Синтаксис в HISTORY_IGNORE?

Я пытаюсь игнорировать некоторые важные команды из файла истории в 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

Я прочитал страницу zshparam, но это не помогает.

Является ли часть 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# *)'
Другие вопросы по тегам