代码之家  ›  专栏  ›  技术社区  ›  Mikhail T.

如何检测管道开头的错误?

  •  0
  • Mikhail T.  · 技术社区  · 7 年前

    在我的脚本中,我需要处理 非最后 管道命令:

     do_real_work 2>&1 | tee real_work.log
    

    令我吃惊的是, $? 包含的退出代码 tee . 实际上,以下命令:

    false 2>&1 | tee /dev/null ; echo $?
    

    输出0。令人惊讶,因为CSH(几乎)与

    false |& tee /dev/null ; echo $status
    

    打印1。

    如何获得 非最后 指挥最近的管道?

    1 回复  |  直到 7 年前
        1
  •  1
  •   l0b0    7 年前

    巴什有 set -o pipefail 它使用第一个非零出口代码(如果有)作为管道的出口代码。

    posix shell没有这样的功能afaik。你可以用不同的方法来解决这个问题:

    tail -F -n0 real_work.log &
    do_real_work > real_work.log 2>&1
    kill $!
    

    也就是说,在运行命令之前,开始跟踪尚未存在的文件,并在运行命令之后终止进程。

    推荐文章