Linux 将 stout 和 stderr 重定向到文件

Linux 将 stout 和 stderr 重定向到文件

鉴于“files.txt”是我的工作目录中的文件而“not-here”不是,我的问题是关于这个陈述:

ls files.txt not-here >out 2>&1

为什么在将合并结果重定向到 out 之前会合并 stdout 和 stderr?按照从左到右的顺序计算逻辑,我认为 stderr 的内容直到 stdout 已重定向到 out 之后才会重定向到 stdout。执行

ls files.txt not-here 2>&1 >out

似乎将两个流都重定向到 out 更有意义,因为您要将 stdout 和 stderr 的内容合并到 stdout,然后将 stdout 重定向到 out,但这只会重定向 stdout。似乎这里发生的事情的顺序与我的想法不一样。

答案1

操作员>&是一个copy操作员。2>&1意思是,让文件描述符 2 成为文件描述符 1 的副本。

如果你这样做2>&1 >out,当2>&1执行时,fd 1 仍然是终端,fd 2 成为 fd1 的副本,因此 fd 2 成为终端。然后>out执行时,fd 1 成为文件out

Bash 手册

ls 2>&1 > dirlist 仅将标准输出定向到文件 dirlist,因为在将标准输出重定向到 dirlist 之前,标准错误已成为标准输出的副本。

相关内容