我在Makefile
中使用rm *.o
命令以删除编译期间生成的所有目标文件。但是,如果某些.o
文件不存在,则会输出一些错误信息。那么,如何禁止输出错误信息呢?
在 make
的语境下,比输出更重要的是,您不希望 make
将 rm
的结果视为失败。解决这个问题有两种方法:
clean:
-rm *.o 2> /dev/null
rm -f *.o 2> /dev/null
第一种方法是在命令前加上减号,这告诉make
忽略返回码。这是首选的、make
特有的方式。第二种方法是使用-f
标志,这仅适用于rm
。
除此之外,您可以选择使用2> /dev/null
来抑制输出,也可以选择不抑制。
在极少数情况下,有必要将输出重定向到/dev/null
。您可能想执行以下操作: rm *.o > /dev/null 2>&1
。其中>/dev/null
部分将stdout发送到/dev/null
,而2>&1
表示将stderr发送到stdout正在去往的位置。
rm -f *.o
or
rm *.o >& /dev/null
>&
符号。在bash
中它可以正常工作,但在dash
中无法工作。由于问题中标签明确指出了使用dash
是完全有效的,因此不适合使用>&
。 - William Pursell
rm
使用标准输出。 - chepner