為什麼 grep 顯示的輸出不包含搜尋字詞?

為什麼 grep 顯示的輸出不包含搜尋字詞?

我想檢查是否安裝了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 到標準輸出,15 到標準誤差。您看到的是向 stderr 報告的內容,因為管道僅處理 stdout。改為這樣做:

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

相關內容