linux脚本2>&1的含义

首先来依次解释2>&1的所有含义:linux

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

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

&是后台执行的意思。code

>覆盖,>>追加。
继承

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

假设咱们ls一个不存在的文件a.txtclass

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的内容.file

相关文章
相关标签/搜索