&引用;grep THIS foo.txt>;这个.txt“;当grep输出为空时,在Makefile而不是bash中给出错误
Makefile如下所示:&引用;grep THIS foo.txt>;这个.txt“;当grep输出为空时,在Makefile而不是bash中给出错误,makefile,grep,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输出为空时,如何修改makefi
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以避免出现错误消息?grep
在bash中不会给出错误,但它会返回非零退出代码:
> grep THIS foo.txt 2>&1
> echo $?
1
如果您想清除非零退出代码,以便make
不会将其标记为错误,您可以执行以下操作:
THIS.txt : foo.txt
grep THIS foo.txt > $@ || true
|true
位表示“如果存在非零退出代码,则返回true
的退出代码(在bash中总是0
).谢谢!有没有一种简单的方法来区分由于空输出而产生的非零退出代码和由于其他原因产生的非零退出代码?这样就可以系统地强制为“否”。空输出并不自动意味着非零退出代码。它只是特定于grep
的操作方式-如果没有找到任何匹配项,它将以n退出关于零退出代码。@user584744:您应该接受这个答案,这是Unix可执行文件工作的基础。很抱歉延迟标记为已接受!只是还不熟悉这个过程。感谢您的回答,它非常适合解决我的问题,我相应地修改了生成文件…+1我需要在使用bash-e的cron-ed脚本中使用它代码>显然,当我使用bash-e
运行脚本时,脚本会自动失败,而grep找不到任何东西。