shell重定向输出(1>&2 2>&1 &>file >&file)

96
安静1337
0.2 2016.07.01 16:49* 字数 277

在shell程序中,最常用的文件描述符FD(file descriptor)大概有三个:

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

example:
如果当前目录下只有一个文件:a

ls
a #代表着1标准输出

ls b
ls ... No such file or directory #代表2错误输出

ls a b 1>f.out 2>f.err #终端上什么都不会输出,相应的信息会被分别输出到f.out和f.err

(ps: 1>f.out缩写:>f.out,通常1>省略成>)

下面,认识下 1>&2 2>&1
如果这样写:1>2,意味着将标准输出重定向到一个名叫2的文件中
1>&2代表着将标准输出重定向到标准错误中

ls a b 1>f.out 2>&1 #所有(标准输入/标准输出)信息都被输出到f.out
ls a b 2>f.out 1>&2 #所有(标准输入/标准输出)信息都被输出到f.out

但不能把顺序写反了

ls a b 2>&1 1>f.out #标准错误被输出到终端,标准输出被输出到f.out

所以,像1>&2中的&,可以理解成一个转义符

总结:

&是一个描述符,如果12前不加&,会被当成一个普通文件。
>1> 的简写。
1>&2 :标准输出重定向到标准错误。
2>&1 :标准错误重定向到标准输出。
&> file>& file 意思是把标准输出和标准错误输出都重定向到文件file中

shell