Sintaxe em HISTORY_IGNORE?

2

Eu estou tentando ignorar alguns comandos sensíveis de serem salvos no arquivo de histórico no 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,] *)'

Mas ainda é mostrado no arquivo de histórico:

% 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

Eu li a página zshparam , mas isso não ajuda.

A parte l[a,l,s,h,] * está correta?

    
por Mark J. Adams 26.01.2018 / 05:13

1 resposta

3

l[a,l,s,h,] * não corresponde a l porque [] não é uma lista separada por vírgulas para expandir - essa é a sintaxe da expansão de chaves. Com [...] , [a,l,s,h,] é igual a [alsh,] e não significa alsh ou nada. Você precisa de l[alsh]# .

Para ls , o espaço parece estar quebrando essa correspondência, apesar de tudo depois disso ser opcional. Então, na prática, isso parece ignorar ls apenas se tiver um argumento:

~ 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

Parece que você precisa tornar o * opcional também:

HISTORY_IGNORE='([bf]g *|cd ..|l[alsh]#( *)#|less *|vim# *)'
    
por muru 26.01.2018 / 05:51