Linux中 2>&1 是什么
发布时间 2020年4月21日 • 1 分钟 读完 • 127 字Linux中 2>&1 是什么
Linux 中三种标准输入输出:
由于STDOUT与STDERR都会默认显示在终端上,为了区分二者的信息,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR,0表示:STDIN。
/tmp/test.sh > /tmp/test.log 2>&1,这里2>&1的意思就是将标准错误也输出到标准输出当中。
编写test.sh文件测试:
# test.sh
echo '----run cmd date----'
date
echo '----run cmd abc----'
abc赋予可执行权限x,并执行查看输出结果:
➜ ~ chmod +x test.sh
➜ ~ cat test.sh
echo '----run cmd date----'
date
echo '----run cmd abc----'
abc
➜ ~ ./test.sh
----run cmd date----
Mon Apr 27 15:43:42 CST 2020
----run cmd abc----
./test.sh: 4: ./test.sh: abc: not found通过./test.sh > test.log这种方式,可以看到错误的信息并没有被追加到test.log而是输出了,结果如下:
➜ ~ ./test.sh > test.log
./test.sh: 4: ./test.sh: abc: not found
➜ ~ cat test.log
----run cmd date----
Mon Apr 27 15:44:21 CST 2020
----run cmd abc----那如果是在crontab中执行,这样的错误我们如何也记录test.log中呢?看下面写法:
➜ ~ ./test.sh > test.log 2>&1
➜ ~ cat test.log
----run cmd date----
Mon Apr 27 15:53:12 CST 2020
----run cmd abc----
./test.sh: 4: ./test.sh: abc: not found错误输出也被记录到test.log了,2>&1表示:将标准错误也输出到标准输出当中。
补充:
./test.sh > /dev/null 2>&1,/dev/null表示空设备,整句意思标准输出重定向到空设备文件,当然也不会输出任何信息到终端。