2016-09-16 10 views
0

我想等待我的码头容器启动一些命令。为什么此条件不会中断

我做如下:

#!/bin/bash 

DOCKER_IP=192.168.99.100 
ES_PORT=9300 

docker-compose up -d 
while [ -z "$(nc -z $DOCKER_IP $ES_PORT)" ]; do 
    sleep 1 
done 
echo "Do some stuff now it's up !" 

我已经与cat -enc -z返回的是空的检查,不带引号,以[ ! -n $(nc ...)]作为条件表达式...

nc返回不是空的,我有Connection to 192.168.99.100 port 9300 [tcp/vrace] succeeded!在循环中,它永远不会退出。

为什么这个简单的循环条件不起作用?

回答

1

问题很可能是因为nc在标准错误而不是标准输出上打印消息“Connection to 192.168.99.100 port 9300 [tcp/vrace] succeeded!”(否则您不应该看到它)。可以重定向标准误差(以便它是由命令替换捕获)如下:

while [ -z "$(nc -z $DOCKER_IP $ES_PORT 2>&1)" ]; do 
    sleep 1 
done 

然而,并非nc打印时连接成功这样的消息的所有版本(矿没有)。那么你为什么不简单地使用退出状态nc -z

while ! nc -z $DOCKER_IP $ES_PORT 
do 
    sleep 1 
done 
相关问题