我在本地计算机上安装了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”,然后添加
if
,until
或while
围绕它们构建,直到该短语有意义为止。until nc
成功; do ...; done
-z
选项将阻止nc
读取stdin,因此不需要< /dev/null
重定向。