shell中的2>&1是什么意思

我们时常会在Linux的Shell脚本中看到2>&1的语句,一直搞不太懂是什么意思。今天特意去查了一下,总算搞懂了,参考了linux shell 中”2>&1”含义一文。

在Linux中,数字是有其特殊意义的,比如0代表键盘输入,1代表屏幕输出(也可以叫标准输出),2代表错误输出(可以叫标准错误)。而>又代表了重定向,所以2>&1的含义是将标准错误重定向到标准输出。

请注意,2>&12>1不是一个意思。

2>1中,2>结合后代表错误重定向,而1代表了错误重定向到名为1的文件。

2>&1中,2>结合后代表错误重定向,&1结合才代表标准输出。

最常见的命令是下面这样子的

1
command >out.file 2>&1 &

该命令的含义是,将command的输出重定向到out.file文件,即输出内容不打印到屏幕(因为屏幕是标准输出),而是输出到out.file文件中。2>&1是将标准错误重定向到标准输出,因为之前的命令中标准输出已经被重定向到out.file文件了,所以标准错误也一并输出到out.file文件中。最终结果就是标准输出和错误都被重定向到out.file中。

最后一个& , 是让该命令在后台执行。

以下命令稍作变更,含义又不一样了

1
command 2>&1 >out.file &

这段命令的含义是,2>&1将标准错误重定向到标准输出,但此时的标准输出还在屏幕上,相当于是标准错误也输出到屏幕。>out.file后标准输出才被重定向到out.file,但是标准错误还处在屏幕上。最终结果就是标准输出重定向到out.file中,而标准错误被重定向到屏幕输出。

最后一个& , 是让该命令在后台执行。

总结

Linux中的命令果然很有意思,是时候该学一波了。

avatar

chilihotpot

You Are The JavaScript In My HTML