详解shell输出重定向:>/dev/null 2>&1

1.输入输出重定向介绍

重定向简单来说就是把本来已经默认的、确定的输入输出给重新定位到你想要的地方。 重定向这个概念在C语言中就有,在C语言编程中,标准输出是屏幕,使用printf()函数默认是输出到屏幕显示。但是有时候我们需要将信息输出到文件或者申请的内存中,这时候就可以用sprintf()和fprintf()函数;也可以
将标准输出的文件描述符给强行占用,使标准输出的文件描述符指向自己想要的文件。在shell中默认打开了三个文件,分别是标准输出(文件描述符0)、标准输出(文件描述符1)、错误输出(文件描述符2),标准输入默认是键盘,标准输出和错误输出默认是屏幕。

2.>和>>介绍

解析:>和>>都是重定向的符号,符号的左边表示文件描述符或者要重定位的内容,如果不写默认是文件描述符1,即标准输出;右边可以是文件也可以是设备。
1.当使用>时,如果右边的文件存在则会先删除在创建,如果右边的文件不存在则创建;
2.当使用>>时,表示追加,右边的文件不会被删除,新的内容会添加到文件的末尾。

3.命令:>/dev/null 2>&1

解析:这可以理解成两句指令:>/dev/null 和 2>&1
(1)>/dev/null :将文件描述符1重定向到/dev/null,文件描述符1是标准输出,/dev/null在linux中是空的设备文件,所以往这个设备文件输入的内容都会丢失;这句指令的作用就是将标准输出重定向到/dev/null这个空的设备文件里,效果就是全部的输出都会丢掉。
(2)2>&1:将文件描述符2重定向到文件描述符1指向的地方,也就是空的设备文件。执行该指令后,标准输出和错误输出都往空设备文件里写,效果就是两者都丢不再打印到屏幕。

4.命令:2>&1 >/dev/null

解析:同样分成两个语句理解、
(1)2>&1:将文件描述符2重定向到文件描述符1指向的地方,此时标准输出是屏幕。该指令的效果是标准输出和错误输出都输出到屏幕。
(2)>/dev/null:将标准输出重定向到空的设备文件,即屏幕不再打印标准输出;但是错误输出此时还是会往屏幕输出,因为错误输出并没有重定向到空的设备文件。

5.总结:

(1)**>/dev/null 2>&1:**标准输出和错误输出都舍弃掉;
(2)**2>&1 >/dev/null:**标准输出被舍弃掉,错误输出被重定位到屏幕;

你可能感兴趣的:(Makefile,&,shell编程,linux,shell)