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

pra*_*ado 2 bash pipe exit-status

while在脚本中运行这个循环来获取mysqldump和压缩它,但exit如果脚本table不存在,我想要脚本。以下是我尝试过的。

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
Run Code Online (Sandbox Code Playgroud)

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

Rak*_*h.N 6

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

if [ ${PIPESTATUS[0]} -ne 0 ];then
        echo "mysqldump Query executed with error !!"
        exit 1
    fi
Run Code Online (Sandbox Code Playgroud)