在Linux系统中0 1 2是一个文件描述符.
从上表看的出来,我们平时使用的
echo "hello" > t.log
其实也可以写成
echo "hello" 1> t.log
linux shell中"2>&1"
把标准出错重定向到标准输出,然后扔到某个文件下面去。
通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。
命令
command > out.file 2>&1 &
command > out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
2>&1是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。
最后一个&,是让该命令在后台执行。
解释
我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:
本来1----->屏幕 (1指向屏幕)
执行>log后, 1----->log (1指向log)
执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
command > file 2>&1
首先是command > file将标准输出重定向到file中,2>&1是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
command 2>&1 > file
2>&1标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file后输出才被重定向到file,但标准错误仍然保持在终端。