以下代码假设如果ssh能够连接到远程机器,则重复打印“已连接”,否则将打印“未连接”。
#!/bin/bash
while [ "1" ]
do
ifconfig usb0 &>/dev/null
if [ "$(echo $?)" == "0" ]
then
sshpass -p passwd ssh -o ConnectTimeout=5 duser@10.1.1.3 sudo echo "connected"
else
echo "not-connected"
fi
sleep 0.2
done
远程机器通过usb0接口连接。我正在通过频繁拔出和插入usb接口来测试这个脚本。问题是有时当我拔掉usb接口时,代码卡在ssh并且不会重复打印。我想如果ssh在执行过程中被中断,它就会卡住。我怎么能克服这个?有人可以帮忙吗?
答案 0 :(得分:1)
显然,它根本没有悬挂。 但是你打印连接的方式似乎是错误的。
这看起来非常可疑
sshpass -p passwd ssh -o ConnectTimeout=5 duser@10.1.1.3 sudo grep "connected"
你想要什么?
通常情况下,如果您需要grep某个应用程序的输出,您需要通过管道进行操作,例如
ls | grep "connected"
答案 1 :(得分:0)
由于您使用的是bash
,因此这是一种更好的测试方式:
2>/dev/null >/dev/tcp/<ip_addr>/<port> && echo pass || echo fail
有关详细信息,请参阅redirections上的Bash文档。