重定向 (计算机)

2025-08-01 07:58:16      世界杯巴西克罗地亚

源自Bourne shell的许多Unix shell,可以将一个数字(文件描述符)放在重定向符号前,这样可以影响用于重定向的数据流。Unix的标准输入输出流是:

Handle

Name

Description

0

stdin

标准输入

1

stdout

标准输出

2

stderr

标准错误输出

例如:

command1 2> file1

执行command1,然后将标准错误输出重定向到文件file1

一些源自csh的shells,将&符号放在重定向符号后,达到同样的效果。这样做的原因是为了将标准输出与文件名为'1'的文件区分开来。例如对于'cat file 2>1'和'cat file 2>&1',前者会将错误输出重定向至叫做'1'的文件,后者则将其重定向至标准输出。

另外一个很有用的功能是将一个标准文件句柄重定向到另一个。最流行的一种用法是将标准错误输出融合到标准输出中去,这样错误信息可以和其他普通的输出信息一起处理。例如:

find / -name .profile > results 2>&1

上面这个命令会找到所有名字为.profile的文件。如果没有重定向,它会输出结果到标准输出,错误(例如在遍历过程中缺少访问某些受保护目录的权限)到标准错误输出。如果标准输出被重定向到一个文件,那么错误信息就会出现在控制台上。通过使用重定向2>&1,输出的结果和错误信息都被写入了文件results.

可以将2>&1放置在">"前,但是这样并不能达到我们想要的效果。因为当解释器读到2>&1, 它并不知道标准输出已经被重定向到哪里,所以标准错误输出并没有和标准输出融合。

如果融合过的输出通过管道作为另外一个程序的输入,那么这个融合2>&1必须在管道符号之前:

find / -name .profile 2>&1 | less

一个命令

command > file 2>&1

的简化版本 (不使用于bourne shell)

command &>file

或者

command >&file

师资队伍
Edge浏览器垂直标签页变为横向的方法