我想列出所有模块nginx服务器,因此我输入以下内容:
nginx -V | tr -- - '\n'
但是它不会将模块放在行中。如果我这样做:
2>&1 nginx -V | tr -- - '\n'
它确实有效。但是为什么呢?
答案1
您所观察到的结果表明,它将nginx -V
输出写入标准错误流(又名stderr
- 文件描述符2
),而不是标准输出流(又名stdout
- 文件描述符1
)。仅stdout
通过管道传递|
,因此您的tr
命令不会收到它。
该2>&1
语法告诉 shell 重定向stderr
到stdout
,以便它随后通过管道传输到tr
。仅供参考,您使用的放置方式在语法上是合法的,但不符合常规 - 通常,这种重定向会写成
nginx -V 2>&1 | tr -- - '\n'
顺便说一句,管道|
确实重定向了输出第一个命令,而不是输入第二个,像往常一样来自标准输入流(stdin
-文件描述符0
)。