为什么 nginx 重定向输出不起作用?

为什么 nginx 重定向输出不起作用?

我想列出所有模块nginx服务器,因此我输入以下内容:

nginx -V | tr -- - '\n'

但是它不会将模块放在行中。如果我这样做:

2>&1 nginx -V | tr -- - '\n'

它确实有效。但是为什么呢?

答案1

您所观察到的结果表明,它将nginx -V输出写入标准错误流(又名stderr- 文件描述符2),而不是标准输出流(又名stdout- 文件描述符1)。仅stdout通过管道传递|,因此您的tr命令不会收到它。

2>&1语法告诉 shell 重定向stderrstdout,以便它随后通过管道传输到tr。仅供参考,您使用的放置方式在语法上是合法的,但不符合常规 - 通常,这种重定向会写成

nginx -V 2>&1 | tr -- - '\n'

顺便说一句,管道|确实重定向了输出第一个命令,而不是输入第二个,像往常一样来自标准输入流(stdin-文件描述符0)。

相关内容