说到linux重定向,就不能不说到文件描述符。
文件描述符是内核为每一个文件维护的标识符。而标准输入(默认终端为键盘),标准输出(默认终端为屏幕),标准错误输出(默认终端屏幕)标识为0,1,2。
重定向,实际是一个文件描述符复制的问题。也就是将某个文件描述符复制为另外一个。即,指向另一个终端。
对于 cmd > log 2>&1的理解:
cmd执行的结果,首先将标准输出重定向到log文件终端,而后将标准错误输出2也重定向到文件描述符1,由于1,已经重定向到log文件中,因此标准错误2也会重定向到log文件中。
对于cmd 2 > log 1 >& 2的理解。
cmd的执行结果,首先将标准错误输出重定向到log文件终端,而后将标准输出1也重定向到标准错误输出2。由于2已经重定向到log文件,因此二者都重定向到log文件中。
对于cmd 2>&1 > log
cmd的执行结果,首先将标准错误输出重定向到标准输出的终端----屏幕,而后将标准输出的文件描述符1,重定向到log文件终端。因此,只有标准输出会打印到log文件中。