Bash

如何獲取管道中特定命令的退出狀態?

  • February 13, 2017

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

但這將給出 的退出狀態gzip -f,而不是的退出狀態mysqldumpmysqldump我知道如果我不在那裡使用,我可以獲得退出狀態gzip,但是這種方法有什麼方法可以獲取退出 ststusmysqldump嗎?

您可以使用 PIPESTATUS 變數來獲取管道每個元素的退出狀態。

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

引用自:https://unix.stackexchange.com/questions/344548