grep -v grep 做什麼

grep -v grep 做什麼

我試著理解grep -v grep下面的內容:

ssh  $server -p $port -o "ConnectTimeout 5" |   grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l

或者有沒有更好的方法來查找TCP連接測試?

答案1

如果你想檢查是否可以在 5 秒內建立 ssh 連線並執行指令,只需執行以下操作:

if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then
  printf '%s\n' "$server is up"
fi

你的命令本身沒有什麼意義。由於您沒有提供在遠端伺服器上執行的命令,因此將以請求偽終端並啟動遠端使用者的登入 shell(或可能是 ForcedCommand)的模式ssh運行。rlogin

然後,您對輸出套用多個篩選器:

  • grep -v "Connection refused":過濾掉其中的任何行輸出其中包含Connection refused.這沒有什麼意義,因為如果錯誤訊息出現,它會寫在 stderr 上,而不是正在過濾的標準輸出上grep,而且還因為:
  • grep "Connected to":僅選擇包含 的行Connected to。這也會排除包含的行,Connection refused因為一行不太可能同時包含兩者。
  • grep -v grep,也要刪除包含的行grep(這樣就成為同時包含Connected toandgrep和 not的行Connection refused!)
  • wc -l:計算結果行數(因此ssh的 stdout 中包含的行Connected to除外,也包含grepConnection refused)。請注意,wc僅當連線關閉時、shell 會話終止時(例如使用者輸入 時)才會輸出該數字exit。但話又說回來,由於用戶不會看到任何輸出(因為這一切wc最終都會發生),因此用戶幾乎不知道他需要輸入exit才能終止該會話。

答案2

grep它排除包含先前管道輸出中的字母序列的所有行。

相關內容