使用>&amp ;;了解重定向

时间:2012-11-19 07:23:35

标签: unix

我知道0,1,2是STDIN,STDOUT和STDERR文件描述符。 我想了解重定向。 '>'表示转储到文件 '>>'意思是追加

但'>&'是什么做什么? 以下命令的分步过程是什么?

command > file 2>&1       
command > file 2<&1       

3 个答案:

答案 0 :(得分:6)

让我们一步一步地分析它:

  • >place表示重新打开标准输出,以便开始写入place,这是一个可以写入的文件名。这是典型的重定向。

  • N>place对任意文件描述符 n 执行相同操作。例如,2>place将标准错误文件描述符2重定向到place1>place>place相同。

  • 如果 place 使用特殊语法&N编写,则会将其视为现有文件描述符编号而不是文件名。因此,>&21>&2都意味着重新打开标准输出以写入标准错误,而2>&1则是另一种方式。

输入完全相同,除了 place 并打开描述符进行读取,<符号左边的文件描述符默认为0,表示标准输入。 2<&1表示“重新打开文件描述符2以进行读取,以便将来从中读取文件描述符1”。这在正常程序中没有意义,因为文件描述符1和2都是可以写的。

答案 1 :(得分:4)

NUMBER1>&NUMBER2表示为文件描述符NUMBER2分配文件描述符NUMBER1。

这意味着,要执行dup2 (NUMBER2, NUMBER1)

command > file 2>&1

Bash处理命令行,它首先找到重定向>file,它将stdout更改为写入file,然后继续处理并找到2>&1,并将stderr更改为写入stdout(此时为file)。

command > file 2<&1       

这是相同的,但2<&1将stderr从stdout重定向到read。因为没有人从stderr读取,所以第二次重定向通常没有效果。

但是,bash将此特殊情况视为与2>&1相同,因此执行dup2 (1, 2)

What does "2<&1" redirect do in Bourne shell?

答案 2 :(得分:1)

2>&1表示将STDERR重定向到STDOUT要去的同一个地方。一个有用的示例grep通常适用于STDOUT,这使得它可以在STDOUTSTDERR上运行:

app 2>&1 | grep hello