Como obter o status de saída de um determinado comando em um pipeline? [duplicado]

2

Estou executando esse loop while em um script para obter mysqldump e compactá-lo, mas quero exit do script se o table não existir. Abaixo está o que eu tentei.

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

Mas isso dará o status de saída de gzip -f , mas não de mysqldump . Eu sei que posso obter o status de saída de mysqldump se eu não estiver usando gzip lá, mas existe alguma maneira neste método para obter o ststus de saída para mysqldump ?

    
por prado 13.02.2017 / 06:02

1 resposta

5

você pode usar a variável PIPESTATUS para obter o status de saída de cada elemento do pipeline.

if [ ${PIPESTATUS[0]} -ne 0 ];then
        echo "mysqldump Query executed with error !!"
        exit 1
    fi
    
por 13.02.2017 / 06:37