2013-03-15 160 views
7

我在Makefile中有一个rm *.o命令来删除编译过程中生成的所有目标文件。但是,如果某些.o文件不存在,则会输出一些错误信息。那么我怎样才能抑制错误信息输出?Shell - 禁止单个命令的输出

回答

11

make的背景下,比输出更重要的是,您不希望将rm的结果视为失败。有两种方法来对付它:

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

第一种方式是用一个减号,它告诉make忽略返回代码前缀的命令。这是首选,make特定的方式。第二种是使用-f标志,该标志仅针对rm

最重要的是,你可以选择以取消与2> /dev/null或不输出。

2

rm -f *.o

rm *.o >& /dev/null

+0

您必须注意'>&'表示法。它可以在'bash'中正常工作,但在'dash'中不起作用。由于'dash'在问题中给出了标签是完全有效的,所以不适合使用'>&'。 – 2013-03-15 14:12:16

6

在少数情况下,它也可能是必要的输出重定向到/dev/null。你可能想要做rm *.o > /dev/null 2>&1> /dev/null部分发送标准输出到/dev/null2>&1说发送标准错误到任何标准输出。

+0

我不相信'rm'完全使用标准输出。 – chepner 2013-03-15 13:17:58

+0

取决于rm是否已被别名为rm -v。大多数系统不再这样做了,这可能是我很久以前从某种发行版中认为这是个好主意的习惯。 – Steve 2013-03-15 13:40:08

+0

我看到BSD手册页提到的历史实现会提示标准输出。 – chepner 2013-03-15 13:43:32