Sna*_*cky 8 linux bash loops netcat
我在本地计算机上安装了netcat,在端口25565上运行了一个服务.使用命令:
nc 127.0.0.1 25565 < /dev/null; echo $?
Run Code Online (Sandbox Code Playgroud)
Netcat检查端口是否打开,如果打开则返回0,如果关闭则返回1.
我试图写一个bash脚本无休止地循环并每秒执行上面的命令,直到命令的输出等于0(端口打开).
即使在端口打开(1变为0)之后,我当前的脚本也会无休止地循环"...".
until [ "nc 127.0.0.1 25565 < /dev/null; echo $?" = "0" ]; do
echo "..."
sleep 1
done
echo "The command output changed!"
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
Hen*_*eld 40
把事情简单化
until nc -z 127.0.0.1 25565
do
echo ...
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
让shell隐式处理退出状态
shell可以通过$?两种方式处理退出状态(记录在其中),显式和隐式.
明确:status=$?,允许进一步处理.
隐式:
对于每一个说法,在你的心中,加上"成功"的命令,然后添加
if,until或while周围结构,直到这句话是有道理的.
until nc成功; do ...; done
该-z选项将停止nc读取标准输入,因此不需要< /dev/null重定向.
您可以尝试类似
while true; do
nc 127.0.0.1 25565 < /dev/null
if [ $? -eq 0 ]; then
break
fi
sleep 1
done
echo "The command output changed!"
Run Code Online (Sandbox Code Playgroud)