Проверка команды на сбой — после перенаправления или до?

Проверка команды на сбой — после перенаправления или до?

У нас есть скрипт 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

Связанный контент