Break out while loop em erro

1

Eu tenho um loop while desta forma:

while :; do
   performTask1 || break
   performTask2 || break
   performTask3 || break
   ...
   performTaskX || break
done

Basicamente, eu quero sair do loop sempre que um dos erros das tarefas é eliminado. Existe uma maneira melhor de conseguir isso?

Suponho que outra maneira de fazer isso é:

while :; do
   performTask1 && performTask2 ... && performTaskX || break
done

No entanto, isso ainda parece feio para mim.

    
por Alberto Rivera 18.11.2016 / 00:39

2 respostas

0

Essencialmente, você está dizendo que, se uma tarefa falhar, as tarefas subseqüentes não devem ser executadas. Não há necessidade de quebrar, apenas torne as tarefas dependentes da conclusão bem-sucedida das tarefas anteriores:

while
  performTask1 &&
  performTask2 &&
  ...
  performTaskX-1 &&
  performTaskX
do :; done

Não há necessidade de colocar todas as tarefas em uma linha ... Essa forma não parece feia aos meus olhos.

    
por 18.11.2016 / 01:31
0
set -e
while :; do
   performTask1
   performTask2
   performTask3
   ...
   performTaskX
done
set +e

Isso sairá do seu script inteiro se houver algum erro.

Se esta não for a última parte do seu script, você pode usar:

while performTask1 &&
    performTask2 &&
    performTask3 &&
    ... &&
    performTaskX
do
  :
done

Veja também:

por 18.11.2016 / 03:18