Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell-抑制单个命令的输出_Linux_Shell_Makefile - Fatal编程技术网

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
完全有效,因此不适合使用
&