Max Koretskyi Asked: 2014-11-09 01:54:15 +0800 CST2014-11-09 01:54:15 +0800 CST 2014-11-09 01:54:15 +0800 CST 为什么重定向 nginx 的输出不起作用? 772 我想逐行列出nginx服务器的所有模块,所以我输入以下内容: nginx -V | tr -- - '\n' 但它不会将模块排成一行。如果我这样做: 2>&1 nginx -V | tr -- - '\n' 有用。但为什么? output 1 个回答 Voted Best Answer steeldriver 2014-11-09T04:31:52+08:002014-11-09T04:31:52+08:00 您所观察到nginx -V的表明将其输出写入标准错误流(又名stderr- 文件描述符2)而不是标准输出流(又名stdout- 文件描述符1)。仅stdout通过管道传递,|因此您的tr命令不会收到它。 该2>&1语法告诉 shell 重定向stderr到,stdout以便它随后通过管道传输到tr. 仅供参考,您使用的位置在语法上是合法的,但非常规 - 大多数情况下,这种重定向会写成 nginx -V 2>&1 | tr -- - '\n' 顺便说一句,管道|实际上是在重定向第一个命令的输出,而不是第二个命令的输入,它像往常一样来自标准输入流(stdin-文件描述符)。0
您所观察到
nginx -V
的表明将其输出写入标准错误流(又名stderr
- 文件描述符2
)而不是标准输出流(又名stdout
- 文件描述符1
)。仅stdout
通过管道传递,|
因此您的tr
命令不会收到它。该
2>&1
语法告诉 shell 重定向stderr
到,stdout
以便它随后通过管道传输到tr
. 仅供参考,您使用的位置在语法上是合法的,但非常规 - 大多数情况下,这种重定向会写成顺便说一句,管道
|
实际上是在重定向第一个命令的输出,而不是第二个命令的输入,它像往常一样来自标准输入流(stdin
-文件描述符)。0