写一个简单的 demo 示例
#include <stdio.h> int main()
{
fprintf(stdout, "stdout output\n");
fprintf(stderr, "stderr output\n"); return ;
}
$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
...