para execução de scripts de quebra no ZSH

3

Eu me sinto idiota. Eu tenho um script ZSH com, por exemplo, dois loops de arquivo, por exemplo:

for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}

O script é encerrado se o primeiro find não encontrar arquivos correspondentes. Eu preciso do script para continuar trabalhando.

O que estou perdendo?

    
por Igor Spasic 21.08.2014 / 23:29

1 resposta

5

Se não houver correspondência para *aaa* , um erro será informado por padrão. Isso é o que faz com que seu script saia.

Para evitar isso, a opção NULL_GLOB precisa ser definida. Então, em vez de reportar um erro, o padrão é simplesmente removido da lista de argumentos, se nada corresponder.

Existem várias maneiras de definir NULL_GLOB:

  • para o script inteiro passando a opção de linha de comando -G para zsh . Isso também pode ser feito na linha de hash-bang:
$ zsh -G SCRIPT
#!/usr/bin/zsh -G
for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}
  • para todas as linhas seguintes definindo-o com setopt:
setopt NULL_GLOB
for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}
  • para um único padrão usando o qualificador de glob N :
for f (*aaa*(N)) {echo "$f"}
for f (*bbb*) {echo "$f"}
    
por 22.08.2014 / 00:41

Tags