Execute um script muito lento até que seja bem-sucedido

0

Meu script fetch_remote_work.sh é bastante lento porque se conecta a uma rede. Eu preciso executá-lo muitas vezes até que funcione.

./fetch_remote_work.sh

while [ $? -ne 0 ]
do
    ./fetch_remote_work.sh
done

Isso obviamente funciona bem. No entanto, não gosto de ser obrigado a chamar o primeiro ./fetch_remote_work.sh . Eu sei que em outros idiomas, como , há um do while loop que executa pelo menos a primeira iteração. O que seria muito claro se existisse em

Então, minha pergunta é: existe uma maneira mais limpa do que o que eu fiz?

    
por smarber 22.11.2017 / 14:17

3 respostas

2

Use o próprio comando como condicional para a construção while .

while ! ./fetch_remote_work.sh; do :; done

    
por 22.11.2017 / 14:22
2

Se você quiser executar algo até que tenha um código de retorno zero,

until [ $RANDOM -eq 42 ]
do 
  echo looking for the answer to life, the universe, and everything
done

(ou como um one-liner)

until [ $RANDOM -eq 42 ]; do echo looking for the answer to life, the universe, and everything; done

Para o seu exemplo:

until ./fetch_remote_work.sh; do :; done

Esse loop não faz "nada" (execute o : builtin ) < em> até que o script fetch_remote_work.sh retorne 0.

    
por 22.11.2017 / 14:31
1

Altere a primeira linha para false , forçando a condição desejável para a primeira iteração.

    
por 22.11.2017 / 14:20

Tags