我想按行列出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 次 |
| 最近记录: |