dir*_*hex 6 shell bash make pipe exit-status
我有一个带有测试套件目标的 makefile,如下所示:
rcheck:
foo
Run Code Online (Sandbox Code Playgroud)
这显示了foostdout上命令的输出,并返回一个退出代码foo,make 照常处理该代码。
我想向此目标添加一些内容,以在foo不影响现有行为的情况下解析的输出 - 即:
foo的 stdout/stderr 应该像以前一样显示在 stdout/stderr 上foo退出代码foo应该以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)
我确信会有更干净的方法,但我想到了上面的方法。(注意,两者均未经测试)