Como contornar Bash para loop não saindo quando um subcomando erros?

3

Eu tenho um loop em um shell script a la:

#!/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 é ter o dado for-loop em um incêndio quando qualquer um dos sub-comandos errar da mesma forma.

Agora, tenho uma solução alternativa: (cd $l; ./run-tests.sh) || die "Message here" juntamente com uma definição adequada de die . No entanto, estou realmente curioso por que o loop for não termina automaticamente pela expectativa definida pelo comando "set -e"? Idealmente, eu gostaria de não usar maiúsculas e minúsculas em todos os circuitos. :)

    
por Samuel A. Falvo II 12.07.2014 / 02:11

2 respostas

1

O motivo set -e não sai imediatamente se ./run-test.sh falhar porque 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 dessa declaração composta é o status da última execução de ./run-tests.sh .

Seu trabalho parece bom para mim.

    
por 12.07.2014 / 06:24
0

Eu não tenho direitos de comentário, por isso, postar aqui. Depende do script em run-tests.sh. Tem certeza de que isso dá um valor diferente de zero:

./run-tests.sh

echo $?

    
por 12.07.2014 / 03:46