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

Wor*_*ine 3 io-redirection stdout stderr

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

ls -l /bin/usr > ls-output.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

不同于:

ls -l /bin/usr 2>&1 >ls-output.txt
Run Code Online (Sandbox Code Playgroud)

Ulr*_*gel 5

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

> 文件名 2>&1

stdout( fd 1) 将指向filename和之后的stderr( fd 2) 将指向stdout此示例中的目标filename

这意味着,既stdoutstderr重定向到filename

2>&1 >文件名

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

,这意味着stderr将重定向到原来的目标stdoutstdout被重定向到filename

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

附加信息

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