Então, eu poderia ter cometido um erro ao não postar detalhes suficientes sobre o script filho - simplifiquei para o propósito desta pergunta, mas talvez seja demais. A instrução exit
foi enterrada dentro de um bloco de código (entre {
e }
) que foi canalizada para tee
para criação de log:
{
#...
if [ $SOME_BAD_CONDITION ] ; then
exit 1
fi
#...
} | tee -a $LOGFILE
echo "script ended at $date">>$LOGFILE
Pelo que entendi, sempre recebi um código de retorno 0 desse script filho porque o último echo
estava retornando 0. Fiz algumas pesquisas e descobri $ PIPESTATUS . Consegui usar isso para garantir que, quando meu script tentasse sair com o código de saída 1, passasse para o script pai:
{
#...
} | tee -a $LOGFILE
EXIT_CODE=${PIPESTATUS[0]}
echo "script ended at $date">>$LOGFILE
exit $EXIT_CODE
Combinado com a sugestão de John, tenho uma solução que parece estar funcionando.