Linux Bash:循环直到命令退出状态等于0

Linux Bash:循环直到命令退出状态等于0,linux,bash,loops,netcat,Linux,Bash,Loops,Netcat,我在本地机器上安装了netcat,在端口25565上运行服务。使用命令: nc 127.0.0.1 25565 < /dev/null; echo $? nc127.0.0.125565

我在本地机器上安装了netcat,在端口25565上运行服务。使用命令:

nc 127.0.0.1 25565 < /dev/null; echo $?
nc127.0.0.125565
Netcat检查端口是否打开,如果打开则返回0,如果关闭则返回1

我正在尝试编写一个bash脚本来无休止地循环,并每隔一秒执行上述命令,直到命令的输出等于0(端口打开)

我当前的脚本只是不停地循环“…”,即使在端口打开之后(1变成0)

直到[“nc 127.0.0.125565

我做错什么了?

你可以试试类似的方法

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!"
为true时;做
nc 127.0.0.1 25565
保持简单

until nc -z 127.0.0.1 25565
do
    echo ...
    sleep 1
done
让shell隐式地处理退出状态

shell可以用两种方式处理退出状态(记录在
$?
中),显式和隐式

显式:
状态=$?
,允许进一步处理

隐含的:

在您的脑海中,对于每个语句,在命令中添加“successed”一词,然后添加
如果
直到
围绕它们构建,直到短语有意义为止

直到nc
成功
;做完成



-z
选项将停止
nc
读取stdin,因此不需要
重定向。

您实际上没有运行nc命令,它只是一个字符串。只是一个建议,但是您是否尝试过在
nc127.0.0.125565
until nc -z 127.0.0.1 25565
do
    echo ...
    sleep 1
done