我正在运行一个脚本,该脚本执行命令并将输出保存到 /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收集了很多答案。