要将 stdout 和 stderr 重定向到文件:
curl 'https://example.com' > myfile 2>&1
这工作正常,但为什么标准错误到标准输出的重定向必须在最后呢?
为什么不能是:
curl 'https://example.com' 2>&1 > myfile
我不明白为什么这个替代方案不起作用;它不会将 stderr 重定向到该文件。从左到右阅读:“下载网页,将 stderr 重定向到 stdout,并将 stdout 重定向到文件”,但这显然不是 Bash 解释命令的方式。 Bash 预计2>&1
会排在最后。为什么一定要2>&1
放在最后呢?
答案1
相信我,我有这个疑问很长时间了。现在,我用简单的话记住了它。
这里的fd
意思是file descriptor
.
在第二种情况下fd2
将指向曾经fd1
在哪里。然后fd2
会指向其他地方。
为了便于理解,请考虑一下
fd1 --> stdout
2>&1, means fd2 --> stdout
then >some_file means fd1 --> some_file
所以,fd2
不是跟随fd1
,而是跟随的目标fd1
。