[Linux] 关于重定向 >和>>的区别 2>&1 - 刘傲天

in 默认分类Ubuntu with 0 comment

Linux重定向

在Linux当中有一个空设备,这个设备可以吞吐一切信息,并且不能读取这个设备,所以这个设备经常被当做“扔垃圾”的地方。
/dev/null 即这个空设备

而在重定向当中

代表重定向的标志
1 代表标准输出

2 代表标准错误
& 表示等同于意思,比如2>&1,表示的就是2的输出也就是标准错误输出和1一样

所以我们经常看到的2>&1就是这个意思,将2和1重定向到一个内容当中。

测试

在这里我写了一个C程序

#include <stdio.h>

int main(void){
    fprintf(stderr, "Hello Error\n");
    fprintf(stdout, "Hello success\n");

    return 0;
}

往标准错误和标准输出各输出一段话,接下来我们来重定向这段话,先编译一下

$:gcc 1.c -o demo

运行

$:./demo 1>1 2>2

此时你打开1和2这两个文件就可以看到文件中的内容

❯ cat 1  
Hello success
❯ cat 2
Hello Error

这两个文件的内容我们都看到了,1即代表标准输出的内容确实也跑到了1这个文件里边,2也跑到了2的文件当中,这就是重定向了标准输出和标准错误输出

2>&1

这句话的意思是把标准错误输出设置为标准输出的位置

$:./demo 1>1 2>&1

注意这里的三个1的意思,第一个1是代表了标准输出,第二个1则是一个文件名称,第三个1也是代表了标准输出,这一段shell我们可以看一下结果,运行是什么都不显示的,但是我们看一下1这个文件里边的内容

❯ cat 1
Hello Error
Hello success

标准的错误输出和标准输出都被重定向到了一个文件,而且没有互相覆盖。

错误用法

错误用法则是文件会被覆盖,并且重新填充,你只能获得最后一次填充的内容

$:./demo 1>1 2>1
$:cat 1
Hello success

可以看到只有一个结果,这就是两者的区别啦!
大功告成!!!!

Responses