当我尝试以这种方式使用 grep 时:
service --status-all | grep network
尽管我将其grep
限制为仅“网络”字符串,但它仍然列出了所有服务
事后:
注意到了这一点文章这解释了为什么命令会这样运行,这就是我喜欢 Linux 的原因,总是有一个很好的理由,但不一定是直观的
答案1
尝试:
service --status-all |& grep network
命令行应用程序可以打印到两个文本流,称为标准输出(标准输出)和标准误差(stderr)。默认情况下,终端仅显示两者相同的输出。
Stdout 被赋予编号 1,而 stderr 被赋予编号 2。默认情况下,重定向操作符(例如>
、|
和 )<
仅适用于 stdout(编号 1)。
|&
将 stdout 和 stderr 一起通过管道传输到右侧标准输入 (stdin) 流上的进程,从而使grep
工作按预期进行。
我不知道为什么service --status-all
这里要打印到 stderr,但一般来说,拥有单独的 stderr 流非常有用,因为即使 stdout 处于静音状态,它也能让你看到错误。