
Eu tenho um loop for em um script de shell como:
#!/bin/bash
set -u
set -e
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
A intenção é fazer com que o loop for morra em um incêndio quando qualquer um dos subcomandos falhar de forma semelhante.
Agora, tenho uma solução alternativa: (cd $l; ./run-tests.sh) || die "Message here"
junto com uma definição adequada de die
. No entanto, estou realmente curioso para saber por que o loop for não termina automaticamente de acordo com a expectativa definida pelo comando "set -e"? Idealmente, eu gostaria de não criar casos especiais em cada loop for assim. :)
Responder1
O motivo set -e
de não sair imediatamente se ./run-test.sh
falhar é que as linhas:
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
para uma declaração composta. O status desta instrução composta é o status da última execução de ./run-tests.sh
.
Seu trabalho parece bom para mim.
Responder2
Eu não tenho direitos de comentários, então postando aqui. Depende do script em run-tests.sh. Tem certeza de que isso fornece um valor diferente de zero:
./run-tests.sh
eco $?