本来是想查看一下,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
可以看到终对应的文件是 设备文件。