
Tenemos un script SQL que ejecutamos mientras redirigimos STDOUT y STDERR a dos archivos separados. Debido a problemas recientes con el script SQL, queremos salir del script con un error en caso de que el script SQL provoque que se devuelva un error.
Actualmente se lee:
executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err
Para manejar el error de esta consulta SQL, quiero agregar una verificación condicional. ¿Lo pongo antes o después de las redirecciones? ES DECIR
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; }
o
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
Respuesta1
Esto no responde directamente a su pregunta sobre el orden, pero si la construcción que está utilizando es difícil de entender, le sugiero que utilice una construcción más simple. No hay premios por hacer que todo sea de una sola línea :)
if ! executeHiveSql ... > ... 2> ...; then
echo "Process FAILED!..."
log ...
exit 1
fi