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中).