我试图了解grep -v grep下面的内容:
ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
Run Code Online (Sandbox Code Playgroud)
或者有没有更好的方法找到TCP连接测试?
如果要检查是否可以在 5 秒内建立 ssh 连接并运行命令,只需执行以下操作:
if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then
printf '%s\n' "$server is up"
fi
Run Code Online (Sandbox Code Playgroud)
你的命令没有意义。由于您没有提供在远程服务器上运行的命令,因此ssh将在rlogin请求伪终端并启动远程用户的登录 shell(或可能是 ForcedCommand)的模式下运行。
然后,您将几个过滤器应用于输出:
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's stdout 中包含的行Connected to除了那些还包含grep或 的行Connection refused)。请注意,wc只有在连接关闭、shell 会话终止时才会输出该数字,例如用户输入exit. 但话又说回来,由于用户不会看到任何输出(因为它wc最终都会发生),用户几乎不知道他需要输入exit以终止该会话。| 归档时间: |
|
| 查看次数: |
7428 次 |
| 最近记录: |