명령이 실패했는지 확인하세요. 리디렉션 후인가요, 아니면 이전인가요?

명령이 실패했는지 확인하세요. 리디렉션 후인가요, 아니면 이전인가요?

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

관련 정보