了解重定向的顺序


8

如果将多个重定向一起使用,更改顺序会有所不同吗?

人们将如何理解其命令的含义?是从左到右还是从右到左读取重定向而建立的重定向链接的通道?

例如

command 2>&1 > somefile

command > somefile 2>&1

谢谢并恭祝安康!

Answers:


7

是的,顺序会有所不同,应该从左到右阅读它们。

command 2>&1 >somefile表示将stderr(2)重定向到stdout的当前目的地(终端)。然后更改stdout转到somefile。因此,stderr转到终端,而stdout转到文件。

command >somefile 2>&1表示将stdout重定向到somefile,然后将stderr重定向到与stdout(文件)相同的目的地。因此,stderr和stdout都转到somefile

《 Bash手册:重定向》第3.6节对此进行了说明。


1
man bash 

说:

重定向在执行命令之前,可以使用由Shell解释的特殊符号来重定向其输入和输出。重定向也可用于打开和关闭当前Shell执行环境的文件。以下重定向操作符可以在简单命令中的任何地方出现或出现在命令之前或之后。重定向按照从左到右的顺序显示。

请注意,重定向的顺序很重要。例如,命令

ls > dirlist 2>&1

将标准输出和标准错误都定向到文件目录,同时命令

ls 2>&1 > dirlist

仅将标准输出定向到文件dirlist,因为在将标准输出重定向到dirlist之前,从标准输出中复制了标准错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.