2016-09-16 6 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 
相關問題