我试图了解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 to
andgrep
和 not 的行Connection refused
!)wc -l
: 计算结果行的数量(因此ssh
's stdout 中包含的行Connected to
除了那些还包含grep
或 的行Connection refused
)。请注意,wc
只有在连接关闭、shell 会话终止时才会输出该数字,例如用户输入exit
. 但话又说回来,由于用户不会看到任何输出(因为它wc
最终都会发生),用户几乎不知道他需要输入exit
以终止该会话。 归档时间: |
|
查看次数: |
7428 次 |
最近记录: |