检查命令是否失败 - 重定向之后还是之前?

检查命令是否失败 - 重定向之后还是之前?

我们有一个 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

相关内容