shell中的2>&1是什么意思
我们时常会在Linux的Shell脚本中看到2>&1
的语句,一直搞不太懂是什么意思。今天特意去查了一下,总算搞懂了,参考了linux shell 中”2>&1”含义一文。
在Linux中,数字是有其特殊意义的,比如0
代表键盘输入,1
代表屏幕输出(也可以叫标准输出),2
代表错误输出(可以叫标准错误)。而>
又代表了重定向,所以2>&1
的含义是将标准错误重定向到标准输出。
请注意,2>&1
和2>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中的命令果然很有意思,是时候该学一波了。