当grep输出为空时,“grep THIS foo.txt> THIS.txt”在Makefile中给出错误,而不是在bash中

时间:2011-01-21 17:16:49

标签: makefile grep

Makefile如下:

THIS.txt : foo.txt  
        grep THIS foo.txt > $@

当grep输出为空(foo.txt中没有这个)时,make会给出错误消息,bash不会:

$ make  
make:*** [THIS.txt] Error 1

$ grep THIS foo.txt > THIS.txt  

$ grep THIS foo.txt 2>&1  

为什么?当grep输出为空时,我应该如何修改我的makefile以避免出现错误消息?

1 个答案:

答案 0 :(得分:13)

grep在bash中没有出错,但 会返回非零退出代码:

> grep THIS foo.txt 2>&1
> echo $?
1

如果你想摆脱那个非零退出代码,以便make不会将其标记为错误,你可以这样做:

THIS.txt : foo.txt
     grep THIS foo.txt > $@ || true

|| true位表示“如果存在非零退出代码,则返回true的退出代码(在bash中始终为0)。