shell 重定向中的 & 符号

写一个简单的 demo 示例

#include <stdio.h>

int main()
{
    fprintf(stdout, "stdout output\n");
    fprintf(stderr, "stderr output\n");
       
    return 0;
}

$gcc test.c -o test

$./test > /dev/null

stderr output

$./test > /dev/null 2>&1

$

对于重定向符号,可以这么理解,简单的

command > /dev/null

此时 > 的前边是省略了 1(标准输出) 的。

2 > &1

意思是将 2(标准错误) 中的数据也重定向到 1(标准输出) 中。

 

【拓展】

重定向有先后顺序,还是以上边的test示例做实验

$./test 2>&1 1>/dev/null | grep out

stderr output

$./test 1>/dev/null 2>&1 | grep out

stderr output

如示例所示,第一次运行时,依然将输出到标准输出中。

 

可以这么理解:

文件描述符     输出到的设备

0          /dev/pts/22(ubuntu路径,不同telminal不同)

1          /dev/pts/22

2          /dev/pts/22

...          

 

所谓重定向的意思就是替换后边的输出设备。

2>&1 1>/dev/null 得到的结果为:

文件描述符     输出到的设备

0          /dev/pts/22

1          /dev/null

2          /dev/pts/22

...

 

1>/dev/null 2>&1 得到的结果为:

文件描述符     输出到的设备

0          /dev/pts/22

1          /dev/null

2          /dev/null

...

 

posted on 2019-02-22 14:57  rivsidn  阅读(502)  评论(0编辑  收藏  举报

导航