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

nc 127.0.0.1 25565 < /dev/null; echo $?

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!"

我在这里做错了什么?

最佳答案

保持简单

until nc -z 127.0.0.1 25565
do
    echo ...
    sleep 1
done
只是让shell隐式处理退出状态
Shell可以通过显式和隐式两种方式处理退出状态(记录在$?中)。
显式:status=$?,允许进行进一步处理。
隐式:
对于您的每条语句,您都想在命令中添加单词“succeeds”,然后添加ifuntilwhile围绕它们构建,直到该短语有意义为止。until nc 成功; do ...; done-z选项将阻止nc读取stdin,因此不需要< /dev/null重定向。

10-08 18:32