在我的脚本中,我需要处理 非最后 管道命令:
do_real_work 2>&1 | tee real_work.log
令我吃惊的是, $? 包含的退出代码 tee . 实际上,以下命令:
$?
tee
false 2>&1 | tee /dev/null ; echo $?
输出0。令人惊讶,因为CSH(几乎)与
false |& tee /dev/null ; echo $status
打印1。
如何获得 非最后 指挥最近的管道?
巴什有 set -o pipefail 它使用第一个非零出口代码(如果有)作为管道的出口代码。
set -o pipefail
posix shell没有这样的功能afaik。你可以用不同的方法来解决这个问题:
tail -F -n0 real_work.log & do_real_work > real_work.log 2>&1 kill $!
也就是说,在运行命令之前,开始跟踪尚未存在的文件,并在运行命令之后终止进程。