如何在 Makefile 中捕获命令退出代码以备后用?

dir*_*hex 6 shell bash make pipe exit-status

我有一个带有测试套件目标的 makefile,如下所示:

rcheck:
        foo
Run Code Online (Sandbox Code Playgroud)

这显示了foostdout上命令的输出,并返回一个退出代码foo,make 照常处理该代码。

我想向此目标添加一些内容,以在foo不影响现有行为的情况下解析的输出 - 即:

  1. foo的 stdout/stderr 应该像以前一样显示在 stdout/stderr 上
  2. 就 Make 而言, rcheck 目标的最终结果是任何foo退出代码
  3. stdout fromfoo应该以bar某种方式传递给第二个命令。bar的退出代码无关紧要,bar除了上面的 1. 之外,不应向 stdout 或 stderr 输出任何内容(除非解决方案意味着bar处理 1. 本身)

这里最简洁的解决方案是什么?

小智 2

如果您不担心数据从 foo 传递到 bar 的时间,并且您可以使用需要在干净目标中处理的临时文件,那么只需:

rcheck:
        foo | tee sometempfile
        -bar < sometempfile >/dev/null 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您非常关心时间,那么您可以让 bar 重复其对 stdout 的输入,并尝试如下操作:

rcheck:
        -(foo; echo $$? > sometempfile) | bar
        exit $(cat sometempfile)
Run Code Online (Sandbox Code Playgroud)

我确信会有更干净的方法,但我想到了上面的方法。(注意,两者均未经测试)