为什么这个 grep 命令不起作用?

Mee*_*org 25 grep services

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

service --status-all | grep network
Run Code Online (Sandbox Code Playgroud)

即使我通过管道将grep其限制为“网络”字符串,它仍然列出所有服务


事后:

注意到这篇文章解释了为什么命令会这样,这就是我喜欢 linux 的原因,总有一个很好的理由,但不需要直观

Fli*_*imm 42

尝试:

service --status-all |& grep network
Run Code Online (Sandbox Code Playgroud)

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

stdout是给出的数字1,和stderr被赋予数字2默认情况下,重定向操作符,比如>|以及<仅适用于标准输出,1号。

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

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