Bash: manipulando “[[declaração]] || problema de eco encontrado; lógica de saída 1 ”

4

Na declaração do título, há um problema que, mesmo que a afirmação seja verdadeira, ela ainda sairá com o status 1 porque, como eu a entendo:

[[ statement ]] || echo problem found ; exit 1

Avalia se a declaração é falsa, problema de eco encontrado. Saia com o status 1. Mesmo se a instrução for verdadeira, a saída 1 ainda acontece porque é separada. Eu pensei em consertar isso rodando em um subshell assim:

[[ statement ]] || (echo problem found ; exit 1)

Isso parece fazer o que eu quero, mas é uma maneira aceitável de lidar com isso?

    
por Gregg Leventhal 10.12.2013 / 18:50

3 respostas

6

Você deve usar

[[ statement ]] || { echo problem found ; exit 1; }

A diferença é que a sintaxe de chave não cria um subshell, o que significa que o exit 1 se aplica ao shell atual. Se você usar (exit 1) , o subshell será encerrado, mas o shell atual continuará em execução.

    
por 10.12.2013 / 18:57
3

Você precisa usar uma sintaxe como esta:

[[ statement ]] || { echo problem found ; exit 1; }

e mais preciso enviar erro padrão

[[ statement ]] || { echo >&2 "problem found"; exit 1; }
    
por 10.12.2013 / 18:55
1

Não tente ser esperto. Lembre-se que a depuração é duas vezes mais difícil do que a escrita , por isso, quando estiver a escrever um programa, seja apenas metade da sua inteligência. pode ser.

if ! [[ statement ]]; then
  echo problem found
  exit 1
fi
    
por 11.12.2013 / 00:26