Eu escrevi um teste confuso que falha de maneira confiável. Eu adicionei algum código de depuração, mas agora quero executar o teste até que ele falhe para que eu possa reunir a saída de depuração.
Eu configurei o teste para que eu possa executá-lo usando:
./runtest
Minha solução atual é escrever um untilfail
script:
#!/bin/bash
$@
while [ $? -eq 0 ]; do
$@
done
Então use-o:
untilfail ./runtest
Existe uma solução mais simples?
Respostas:
while
requer um comando para executar, para que você possa usar o mais simplesIsso interromperá o loop quando
./runtest
retornar um código de saída diferente de zero (que geralmente é indicativo de falha).Para simplificar ainda mais a sua solução atual, você deve alterar o script tillfail para ficar assim:
E então você pode chamá-lo com qualquer comando que já esteja usando:
fonte
[
é um comando. É um equívoco comum com novos usuários que[
faz parteif
ewhile
sintaxe.count=0
antes do loop e, em vez de:
no loop (no-op), coloque(( count++ ))
- isso incrementa o contador.say
e um alto-falante que você pode usarwhile ./runtest; do :; done && say test failed
para ser notificado se ele nunca párasay
é específico para o macOS.Se você não deseja agrupar uma linha de tubulação complexa em um script ou função shell, isso funcionará:
A solicitação HTTP nesse caso sempre retorna 200, mas também retorna algum JSON que possui um atributo "HasErrors": true quando há um erro.
fonte
Tendo tido um problema semelhante em um sistema que teve a lógica de repetição de shell duplicada em todos os lugares, criei uma ferramenta dedicada para resolver isso chamado "repetição":
Um exemplo mais complexo:
Ferramenta disponível em https://github.com/minfrin/retry .
fonte