如何获取管道中特定命令的退出状态?

如何获取管道中特定命令的退出状态?

while我正在脚本中运行此循环来获取并压缩它,但如果该脚本不存在,mysqldump我想要该脚本。以下是我尝试过的。exittable

while read TABLES; do
    sudo mysqldump $DB $TABLES | gzip -f > $DB.$TABLES.sql.gz
    if [ $? != 0 ]; then
        echo "mysqldump Query executed with error !!"
        exit 1
    fi
done < file

但这将给出 的退出状态gzip -f,但不会给出 的退出状态mysqldump。我知道mysqldump如果我不在那里使用,我可以获得退出状态gzip,但是此方法有什么方法可以获取退出状态mysqldump吗?

答案1

您可以使用 PIPESTATUS 变量来获取管道每个元素的退出状态。

if [ ${PIPESTATUS[0]} -ne 0 ];then
        echo "mysqldump Query executed with error !!"
        exit 1
    fi

相关内容