我想按行列出nginx服务器的所有模块,因此我输入以下内容:
nginx -V | tr -- - '\n'
Run Code Online (Sandbox Code Playgroud)
但它不会将模块排成一行。如果我这样做:
2>&1 nginx -V | tr -- - '\n'
Run Code Online (Sandbox Code Playgroud)
有用。但为什么?
您所观察到的内容表明将nginx -V
其输出写入标准错误流(又名stderr
- 文件描述符2
)而不是标准输出流(又名stdout
- 文件描述符1
)。只stdout
通过管道传递|
,因此您的tr
命令不会收到它。
该2>&1
语法告诉 shell 重定向stderr
到,stdout
以便随后通过管道传输到tr
。仅供参考,您使用的位置在语法上是合法的,但非常规 - 大多数情况下,这种重定向会写成
nginx -V 2>&1 | tr -- - '\n'
Run Code Online (Sandbox Code Playgroud)
顺便说一句,管道|
实际上是重定向第一个命令的输出,而不是第二个命令的输入,第二个命令像往常一样来自标准输入流(stdin
- 文件描述符)。0
归档时间: |
|
查看次数: |
1050 次 |
最近记录: |