Scripting

使用“command 2>&1 | tee -a /var/log/file.log”時返回退出程式碼的命令仍返回 0

  • March 9, 2022

我正在執行一個執行命令並將輸出保存到 /var/log 中的文件的腳本。之後,它獲取退出程式碼並根據 if/else 條件執行另一個命令。問題是: 2>&1 | tee -a /var/log/file.log始終返回 0,無論命令的真正退出程式碼如何。

如何解決這個問題?

一段程式碼:

rdiff-backup --force /localdir external.domain"::/backups/externaldir 2>&1 | tee -a /var/log/file.log
e="$(echo $?)"
if [ "$e" == "0" ]; then
       echo "`date` Done." 2>&1 | tee -a /var/log/file.log
else
       echo "`date` Fail!" 2>&1 | tee -a /var/log/file.log            
fi

這是因為管道的退出程式碼是管道最後階段的退出程式碼,並且 tee 永遠不會失敗:)

這可以根據您的外殼以不同的方式解決。 https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another收集了很多答案。

引用自:https://serverfault.com/questions/936081