【问题标题】:Piping To Grep Is Giving Too Many Results到 Grep 的管道给出了太多的结果
【发布时间】:2015-12-03 11:09:31
【问题描述】:

我正在尝试检查特定服务是否正在通过 Linux 终端运行,但以下命令似乎没有按预期过滤结果。不知道我做错了什么......

service --status-all | grep subversion

这会产生几行输出,例如,

 [ ? ] Networking

我不确定为什么会这样,因为字符串“subversion”不包含在上面的行中......

【问题讨论】:

  • service subversion status; ret=$?; echo $ret 呢?
  • 谢谢,这肯定行得通,但我仍然想知道为什么 grep 会产生额外的结果......

标签: linux unix grep linux-mint


【解决方案1】:

你应该使用:

service --status-all |& grep subversion

因为没有状态的服务 ([ ? ]) 被发送到标准错误,而标准错误不会通过管道传输到 grep(然后无论如何都会打印在您的终端上)。

|& 将 stderr 发送到 stdout,以便 grep 能够过滤它。

【讨论】:

    【解决方案2】:

    试试这个并将stderr (2) 重定向到标准输出 (1):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 2012-07-30
      相关资源
      最近更新 更多