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

alx*_*lic 7 grep makefile

Makefile如下:

THIS.txt : foo.txt  
        grep THIS foo.txt > $@
Run Code Online (Sandbox Code Playgroud)

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

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

$ grep THIS foo.txt > THIS.txt  

$ grep THIS foo.txt 2>&1  
Run Code Online (Sandbox Code Playgroud)

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

Amb*_*ber 13

grep在bash中没有给出错误,但它确实返回一个非零退出代码:

> grep THIS foo.txt 2>&1
> echo $?
1
Run Code Online (Sandbox Code Playgroud)

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

THIS.txt : foo.txt
     grep THIS foo.txt > $@ || true
Run Code Online (Sandbox Code Playgroud)

|| true位说"如果有非零退出代码,则返回代码的退出代码true(总是0在bash中).