Shell - 抑制单个命令的输出

9

我在Makefile中使用rm *.o命令以删除编译期间生成的所有目标文件。但是,如果某些.o文件不存在,则会输出一些错误信息。那么,如何禁止输出错误信息呢?

3个回答

13

make 的语境下,比输出更重要的是,您不希望 makerm 的结果视为失败。解决这个问题有两种方法:

clean:
    -rm *.o    2> /dev/null
    rm -f *.o  2> /dev/null

第一种方法是在命令前加上减号,这告诉make忽略返回码。这是首选的、make特有的方式。第二种方法是使用-f标志,这仅适用于rm

除此之外,您可以选择使用2> /dev/null来抑制输出,也可以选择不抑制。


6

在极少数情况下,有必要将输出重定向到/dev/null。您可能想执行以下操作: rm *.o > /dev/null 2>&1。其中>/dev/null部分将stdout发送到/dev/null,而2>&1表示将stderr发送到stdout正在去往的位置。


我不相信 rm 使用标准输出。 - chepner
这取决于是否将rm别名设置为rm -v。大多数系统不再这样做了,这可能是我很久以前从某个发行版中学来的习惯。 - Steve
我看到BSD手册中提到,历史实现会在标准输出上提示。 - chepner

2

rm -f *.o

or

rm *.o >& /dev/null


1
你必须小心使用>&符号。在bash中它可以正常工作,但在dash中无法工作。由于问题中标签明确指出了使用dash是完全有效的,因此不适合使用>& - William Pursell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接