在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中的&,可以理解成一个转义符
总结:
&是一个描述符,如果1或2前不加&,会被当成一个普通文件。
>
是 1>
的简写。
1>&2
:标准输出重定向到标准错误。
2>&1
:标准错误重定向到标准输出。
&> file
和>& file
意思是把标准输出和标准错误输出都重定向到文件file中
网友评论