如果同时使用多个重定向,更改它们的顺序是否会产生影响?
如何理解其命令的含义?重定向的链接通道是按照从左到右还是从右到左读取重定向的方式构建的?
例如
command 2>&1 > somefile
command > somefile 2>&1
感谢致敬!
答案1
是的,顺序有所不同,应该从左到右阅读。
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 节:重定向。
答案2
man bash
说:
重定向 在执行命令之前,可以使用 shell 解释的特殊符号来重定向其输入和输出。重定向还可用于打开和关闭当前 shell 执行环境的文件。以下重定向运算符可以出现在简单命令之前或出现在命令中的任何位置,也可以跟随在命令之后。重定向按照它们出现的顺序从左到右进行处理。
和
请注意,重定向的顺序很重要。例如,命令
ls > dirlist 2>&1
将标准输出和标准错误定向到文件目录列表,而命令
ls 2>&1 > dirlist
仅将标准输出定向到文件 dirlist,因为在将标准输出重定向到 dirlist 之前,标准错误是从标准输出复制的。