Linux Shell-抑制单个命令的输出
我在Linux Shell-抑制单个命令的输出,linux,shell,makefile,Linux,Shell,Makefile,我在Makefile中有一个rm*.o命令来删除编译期间生成的所有对象文件。但是,如果某些.o文件不存在,则会输出一些错误信息。那么,如何抑制错误信息输出?rm-f*.o 或 rm*.o>和/dev/null在极少数情况下,可能还需要将输出重定向到/dev/null。您可能需要执行rm*.o>/dev/null 2>&1。/dev/null部分将stdout发送到/dev/null,2>&1表示将stderr发送到stdout要去的任何地方。在make的上下文中,比输出更重要的是,您不希望mak
Makefile
中有一个rm*.o
命令来删除编译期间生成的所有对象文件。但是,如果某些.o
文件不存在,则会输出一些错误信息。那么,如何抑制错误信息输出?rm-f*.o
或
rm*.o>和/dev/null
在极少数情况下,可能还需要将输出重定向到/dev/null
。您可能需要执行rm*.o>/dev/null 2>&1
。/dev/null
部分将stdout发送到/dev/null
,2>&1
表示将stderr发送到stdout要去的任何地方。在make
的上下文中,比输出更重要的是,您不希望make将rm
的结果视为失败。有两种处理方法:
clean:
-rm *.o 2> /dev/null
rm -f *.o 2> /dev/null
第一种方法是在命令前面加一个减号,告诉make
忽略返回代码。这是首选的,make
特定方式。第二种方法是使用-f
标志,该标志仅适用于rm
除此之外,您还可以选择是否使用
2>/dev/null
抑制输出。我认为rm
根本不使用标准输出。这取决于rm是否被别名为rm-v。大多数系统不再这样做了,这可能是我很久以前养成的习惯,当时一些发行版认为这是个好主意。我看到BSD手册页提到历史实现会在标准输出上提示。您必须小心使用&
符号。它在bash
中可以正常工作,但在dash
中不起作用。鉴于问题中的标记,dash
完全有效,因此不适合使用&
。