nginx命令 输出重定向 获取不到内容?

作者

本来是想查看一下,nginx 的版本。就使用 grep 想匹配一下 version, 结果没有获取到想要的内容。命令是这个 nginx -V | grep "version" 输出的内容是 和 nginx -V是一样的,说明没有通过 nginx -V 把输出的内容,传递到 grep 中。

正确的方法应该是

nginx -V 2>&1   | grep "version"
nginx version: nginx/1.14.0

这样就可以正确的获取到想要的内容。

需要重定向的原因

本来我以为 nginx -V 输出的内容应该是在标准的输出中。事实上输出的内容是在标准的错误输出流中, 这里重新定向到了标准输出流就可以解决。因为grep接收的是标准的输出流的数据。不过还是不明白为什么出现在错误流中?

标准的流

名称 文件描述 含义 设备 说明
STDIN 0 标准输入 键盘 输入要执行的命令
STDOUT 1 标准输出 显示器 命令执行首,正常的输出
STDERR 2 标准错误 显示器 错误信息的输出

查看标准流对应的文件

ll /dev/std
stderr  stdin   stdout

ll /dev/stdin
lrwxrwxrwx. 1 root root 15 Sep 11 13:26 /dev/stdin -> /proc/self/fd/0

 ll /proc/self/fd/0
lrwx------. 1 root root 64 Dec  8 11:46 /proc/self/fd/0 -> /dev/pts/2

ll /dev/pts/2
crw--w----. 1 root tty 136, 2 Dec  8 11:46 /dev/pts/2

可以看到终对应的文件是 设备文件。

回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注