![为什么 grep 显示不包含搜索词的输出?](https://linux22.com/image/1438311/%E4%B8%BA%E4%BB%80%E4%B9%88%20grep%20%E6%98%BE%E7%A4%BA%E4%B8%8D%E5%8C%85%E5%90%AB%E6%90%9C%E7%B4%A2%E8%AF%8D%E7%9A%84%E8%BE%93%E5%87%BA%EF%BC%9F.png)
我想检查 sensu 服务是否已安装。我运行了此命令service --status-all| grep sensu
,以下是输出
vagrant@vagrant-ubuntu-trusty-64:~$ service --status-all| grep sensu
[ ? ] apport
[ ? ] console-setup
[ ? ] cryptdisks
[ ? ] cryptdisks-early
[ ? ] dns-clean
[ ? ] irqbalance
[ ? ] killprocs
[ ? ] kmod
[ ? ] networking
[ ? ] ondemand
[ ? ] open-vm-tools
[ ? ] pppd-dns
[ ? ] rc.local
[ ? ] screen-cleanup
[ ? ] sendsigs
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ ? ] virtualbox-guest-x11
我觉得很奇怪,grep
没有过滤掉上述所有行,因为它们都不包含搜索词“sensu”
问题是:为什么?
答案1
看起来有些服务将其状态报告给 stderr:
$ service --status-all 2>&1 | wc -l
43
$ service --status-all 2>/dev/null | wc -l
28
$ service --status-all 2>&1 1>/dev/null | wc -l
15
28 到 stdout,15 到 stderr。您看到报告到 stderr 的那些,因为管道只处理 stdout。请改为执行以下操作:
service --status-all 2>&1| grep sensu