linux脚本2>&1的含义

首先来依次解释2>&1的全部含义:

2和1都是FD(File Descriptor文件标识符)。linux系统中,系统为每一个打开的文件指定一个文件标识符进行跟踪,文件标示符是一个大于0的整数,不同数字代表不同含义。shell的标识符通常为10个,即0~9.系统默认占用了三个也是我们常用的:

0 标准输入
1 标准输出 (stdout)
2 标准错误输出 (stderr)

&是后台执行的意思。

>覆盖,>>追加。

所以总体上这个命令的含义是:将标准错误输出到重定向,通过后台&,放到标准输出所在的地方。

假设我们ls一个不存在的文件a.txt

ls a.txt > file.log 2>&1

其实这个命令如果用清晰的命令表达的,应该是这样的:

ls a.txt > file.log  2>file.log

这是因为如果用第二种写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道,而第一种这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.

你可能感兴趣的:(linux脚本2>&1的含义)