===============1.有些人经常问我这个问题问题===========
经常在脚本里面看到这个 2>&1 表示什么意思啊?
==============2.理论==========================
在linux中,每个进程都会有三个文件,并且这三个文件会进行重定向处理:
/dev/stdin ----->/proc/self/fd/0 //表示标准输入,即键盘输入
/dev/stdout ----->/proc/self/fd/1 //表示标准输出,即显示屏,屏幕
/dev/stderr ----> /proc/self/fd/2 //表示标准错误输出,有些脚本运行时会报错,就会输入到这。
你看到的2>&1中的数字就是上面重定向后的数字。
0: 表示键盘输入
1:将信息输入到屏幕(一般linux命令都是默认为1)
2:将信息输入到错误输出
===================3.举个栗子====================
在终端中写一个sh文件
>>>>>>>>>>>>>>
$cat demo.sh
#!/bash/bin
xxxx
date
<<<<<<<<<<<<<<
执行这个sh文件,并将输出到demo.log中
./demo.sh > demo.log
./demo.sh: line 2: xxxx: command not found
由于xxxx不是linux命令会报错,并且将错误信息输出到屏幕(标准输出),而date是linux
命令,会正确输出,并将正确的信息输出到demo.log文件中
cat demo.log
Sat Mar 5 09:49:11 HKT 2016
==============4.再回头看最开始的问题============
2>&1 意思就很明了了,就是讲执行linux命令时的错误信息也输出到屏幕上。
./demo.sh 2>&1
./demo.sh: line 2: xxxx: command not found
Sat Mar 5 09:57:09 HKT 2016
===============收工======================