使用“命令 2>&1 | tee -a /var/log/file.log”时返回退出代码的命令仍返回 0

使用“命令 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

答案1

这是因为管道的退出代码是最后的管道的阶段,三通永远不会失败:)

根据您的 shell,可以采用不同的方法解决这个问题。 https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another收集了很多答案。

相关内容