명령 실패 여부 확인 - 리디렉션 후 또는 이전?

명령 실패 여부 확인 - 리디렉션 후 또는 이전?

STDOUT 및 STDERR을 두 개의 별도 파일로 리디렉션하는 동안 실행하는 SQL 스크립트가 있습니다. 최근 SQL 스크립트 문제로 인해 SQL 스크립트로 인해 오류가 반환되는 경우 오류와 함께 스크립트를 종료하려고 합니다.

현재 다음과 같습니다.

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

이 SQL 쿼리의 실패를 처리하기 위해 조건부 확인을 추가하고 싶습니다. 리디렉션 전이나 후에 배치합니까? 즉

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

관련 정보