重定向标准输出和标准错误

重定向标准输出和标准错误

我一直在试图弄清楚文件描述符之间的关系。我不明白的一件事是:

ls -l /bin/usr > ls-output.txt 2>&1

不同于:

ls -l /bin/usr 2>&1 >ls-output.txt

答案1

重定向的顺序很重要,因为它们是按顺序执行的:

>文件名2>&1

stdout( fd 1) 将指向此示例中的目标filename,然后stderr( fd 2) 将指向 的目标。stdoutfilename

这意味着stdout和都stderr被重定向到filename

2>&1>文件名

这里stderr( fd 2) 将指向 的目标stdout,之后stdout( fd 1) 将重定向到filename.

这意味着stderr将重定向到 的原始目标stdout并被stdout重定向到filename

简而言之,重定向的顺序很重要,因为每个文件描述符都是相互独立的。

附加信息

有关更多信息,请查看其他一些问题和答案,例如:

答案2

他们不是。

a>&b 将 fd a 重定向到 fd b。如果未给出 a,则假定为 1。 1 是标准输出,2 是标准错误。

某些 shell(例如 Bash)还允许您指定 &> file 以同时重定向两者。然而,> 2>&1 更便携。

相关内容