2016-09-16 4 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 !" 

이미 [ ! -n $(nc ...)] 같은 조건식으로, 따옴표없이, nc -z의 반환이 비어 cat -e 확인 ...

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 
관련 문제