重定向“1> / dev / null 2>& 1”和“2>& 1 1> / dev / null”之间的区别是什么?

时间:2016-02-10 11:43:49

标签: shell io-redirection

重定向之间的区别是什么          1> / dev / null 2>& 1 和          2>& 1 1> / dev / null

似乎第一个显示输出到stdout而不是第二个。

有人可以解释一下! 谢谢

2 个答案:

答案 0 :(得分:2)

扩展Lokendra26的回答:/ dev / null是系统上的一个特殊文件,一个用于丢弃写入其中的任何内容的设备。如果您不想看到它,那么在那里发送输出很常见。 "文件"在这种情况下,通常使用unix术语,既可以是普通磁盘文件,也可以是null设备或终端等设备。

" 1"和" 2"是文件描述符,发送输出的地方的指示符。程序使用FD 1,"标准输出"作为普通输出的目标,以及FD 2,"标准错误",用于错误输出。这些文件描述符可以在不同时间指向不同的文件。通常它们都指向你的终端,所以你可以从那里写的程序输出。

&运营商不仅仅是为了消除歧义。它实际上意味着"查找此FD指向的任何内容"。

了解这些细节非常重要,以便了解您所询问的两种重定向之间的区别。

1>/dev/null 2>&1这实际上是两个语句,按顺序处理。首先,指向"标准输出"在null设备上(因此丢弃写入它的任何内容)。第二,指向"标准错误"在任何"标准输出"指向,在这种情况下是/ dev / null。最终结果是两个文件描述符的输出都将被丢弃。

2>&1 1>/dev/null同样是两个陈述。首先,指出"标准错误"在任何"标准输出"指着。通常这将是你的终端,正如我上面写的那样。第二,指向"标准输出" at / dev / null。最终结果 - 仅#34;标准输出"被丢弃,"标准错误"仍会打印到您的终端。

答案 1 :(得分:0)

在Unix中“>”代表将输出重定向到文件或其他地方。

“1>” 中 - 代表stdout管道的输出

“2>” 中 - 代表stderr(错误)管道的输出(错误进入此管道)

所以从你的问题来看,

“1> / dev / null”:告诉系统将标准输出定向到保存在/ dev

的null(文件)

“2>& 1”:告诉系统将stderr管道的输出重定向到stdout管道输出的位置。因此,在这种情况下,您可以将stdout和stderr输出写入单个文件中。

虽然“2>& 1 1>”这对我来说没有意义,因为它等同于“2>& 1”

PS。如果您对& 1部分感到困惑,则用于解决当1是文件名时可能出现的歧义。

希望这对你有用。