
У нас есть скрипт SQL, который мы выполняем, перенаправляя STDOUT и STDERR в два отдельных файла. Из-за недавних проблем со скриптом SQL мы хотим завершить скрипт с ошибкой в случае, если скрипт SQL вызовет возврат ошибки.
В настоящее время он гласит:
executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err
Чтобы обработать сбой этого SQL-запроса, я хочу добавить условную проверку. Мне нужно поставить ее до перенаправлений или после? IE
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; }
или
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
решение1
Это не отвечает напрямую на ваш вопрос о порядке, но если конструкция, которую вы используете, сложна для понимания, то я предлагаю вам использовать более простую конструкцию. Нет никаких наград за то, чтобы сделать все одной строкой :)
if ! executeHiveSql ... > ... 2> ...; then
echo "Process FAILED!..."
log ...
exit 1
fi