
我們有一個 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