Verificando se um comando falha - Depois dos redirecionamentos ou antes?

Verificando se um comando falha - Depois dos redirecionamentos ou antes?

Temos um script SQL que executamos enquanto redirecionamos STDOUT e STDERR para dois arquivos separados. Devido a problemas recentes com o script SQL, queremos sair do script com um erro caso o script SQL cause o retorno de um erro.

Atualmente lê-se:

executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err

Para lidar com a falha desta consulta SQL, quero adicionar uma verificação condicional. Devo colocar isso antes dos redirecionamentos ou depois? Ou seja

executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err || { echo 'Process FAILED! Please check the logs.' ; log $AUTO_JOB_NAME "Failure" 1 "Archive process FAILED..."; exit 1; }

ou

executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} || { echo 'Process FAILED! Please check the logs.' ; log $AUTO_JOB_NAME "Failure" 1 "Archive process FAILED..."; exit 1; } > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err

Responder1

Isso não responde diretamente à sua pergunta sobre o pedido, mas se a construção que você está usando for difícil de entender, sugiro que você use uma construção mais simples. Não há prêmios por fazer tudo de uma só vez :)

if ! executeHiveSql ... > ... 2> ...; then
    echo "Process FAILED!..."
    log ...
    exit 1
fi

informação relacionada