我一直在试图弄清楚文件描述符之间的关系。我不明白的一件事是:
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
) 将指向 的目标。stdout
filename
这意味着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 更便携。