
Tengo un bucle for en un script de shell a la:
#!/bin/bash
set -u
set -e
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
La intención es que el bucle for muera en un incendio cuando cualquiera de los subcomandos produzca un error similar.
Ahora tengo una solución alternativa: (cd $l; ./run-tests.sh) || die "Message here"
junto con una definición adecuada de die
. Sin embargo, tengo verdadera curiosidad por saber por qué el bucle for no termina automáticamente según la expectativa establecida por el comando "set -e". Lo ideal sería no incluir casos especiales en cada bucle for como ese. :)
Respuesta1
La razón por la set -e
que no sale inmediatamente si ./run-test.sh
falla es que las líneas:
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
para una declaración compuesta. El estado de esta declaración compuesta es el estado de la última ejecución de ./run-tests.sh
.
Tu solución me parece buena.
Respuesta2
No tengo derechos para comentar, así que publico aquí. Depende del script en run-tests.sh. ¿Estás seguro de que esto da un valor distinto de cero?
./ejecutar-pruebas.sh
eco $?