コマンドが失敗したことを確認してください。リダイレクト後ですか、それとも前ですか?

コマンドが失敗したことを確認してください。リダイレクト後ですか、それとも前ですか?

STDOUTとSTDERRを2つの別々のファイルにリダイレクトしながら実行される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

おすすめ記事