当前位置: 首页>>技术教程>>正文


services – 为什么此grep命令不起作用?

,

问题描述

当我尝试以这种方式使用grep时:

service --status-all | grep network

即使我将其通过管道传送到grep以仅将其限制为”network”字符串,它仍然列出所有服务


After the Fact:

Noticed this article that explains why the command behaves this way, that’s what I like about linux, there is always a good reason, but not necessary intuitive

最佳办法

尝试:

service --status-all |& grep network

命令行应用程序可以打印到两个文本流,称为标准输出(stdout)和标准错误(stderr)。默认情况下,终端只显示两个的输出相同。

Stdout的编号为1,stderr的编号为2。默认情况下,重定向操作符(如>|<)仅适用于stdout的编号1。

|&将stdout和stderr一起输送到右侧标准输入(stdin)流上的进程,这使grep可以按预期工作。

我不知道为什么service --status-all在这里打印到stderr,但是总的来说,拥有一个单独的stderr流非常有用,因为即使在stdout静音的情况下,它也可以让您看到错误。

次佳办法

您需要将standard error stream(2)重定向到standard output(1):

service --status-all 2>&1 | grep network

操作员>通常重定向到文件(例如2>/tmp/file)。要使用descriptor重定向到其他流,需要在其前面加上&(请注意,字符之间不能有空格)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10818.html,未经允许,请勿转载。