在Makefile规则中重定向stdout和stderr

时间:2012-08-01 08:22:35

标签: linux bash shell makefile

我想将脚本的输出重定向到另一个程序。我通常会使用这两种形式做的事情:

 python test.py 2>&1 | pyrg
 python test.py |& pyrg

我的问题是它在makefile中不起作用:

[Makefile]
test:
    python test.py 2>&1 | pyrg [doesn't work]

我希望避免编写可以完成工作的脚本文件。

修改

这似乎是pyrg问题:

python test.py 2>&1 | tee test.out // Writes to the file both stderr and stdout
cat test.out | pyrg                // Works fine!
python test.py 2>&1 | pyrg         // pyrg behaves as if it got no input

这对我来说是一个糟糕的解决方案,因为在测试失败的情况下我都没有进入cat部分(一切都在Makefile规则中)

2 个答案:

答案 0 :(得分:8)

我偶然发现了同样的问题并对答案不满意。我有一个二进制TLBN在测试用例example2.TLBN上失败了。

这是我的make文件首先查看的内容。

make:
     ./TLBN example2.TLBN > ex2_output.txt

我遇到的错误消息失败并停止了制作过程。

这是我的修复:

make:
    -./TLBN example2.TLBN > ex2_output.txt 2>&1

注意行开头的-告诉make忽略对stderr的任何输出。

希望这有助于有类似问题的人。

答案 1 :(得分:0)

奇怪的是,我遇到了同样的问题,并像这样解决了它:

check-errors:
    check-for-errors.sh &> errors.txt

我不太确定为什么2>&1 >errors.txt在这里不起作用,但是&>