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它排除包含先前管道输出中的字母序列的所有行。

相关内容