Scripting
使用“command 2>&1 | tee -a /var/log/file.log”時返回退出程式碼的命令仍返回 0
我正在執行一個執行命令並將輸出保存到 /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收集了很多答案。