2016-08-07 8 views
1

참고 - 이것은 중복이 아닙니다! bash 출력을 bash 배열로 변환하는 것에는 다른 질문이 있습니다. 인라인은 모두입니다. 인라인해야하는 이유는 until입니다.bash 명령 출력을 배열에 인라인으로 중첩하는 방법은 무엇입니까?

dig 명령에서 포트를 구문 분석하는 until 명령을 쓰려고합니다.

다음은 별도의 줄에있는 작업 명령입니다.

SERVER_DIG_RESULT=$(dig +noall +answer $SERVER_DNS_NAME SRV) 
SERVER_STRING_ARRAY=($SERVER_DIG_RESULT) 
SERVER_PORT=${SERVER_STRING_ARRAY[6]} 
until nc -z $SERVER_DNS_NAME $SERVER_PORT 

이 가진 문제는 DNS가 처음 dig 명령이 실행 된 후까지 온라인 상태가되지 않을 수있다, 그래서 당신은 until 명령을 반복해서 dig를 실행하려면.

여기 내 고장 명령 (한 줄에 넣으려고 시도)입니다.

until nc -z $SERVER_DNS_NAME ${$(dig +noall +answer $SERVER_DNS_NAME SRV)[6]} 

변수 대체에 문제가있는 것 같습니다. 내 질문 : bash 명령 출력을 배열에 인라인으로 중첩하는 방법은 무엇입니까?

+0

시도해 보지 않았지만 배열을 반환 했습니까? '$ (dig + noall + answer $ SERVER_DNS_NAME SRV)'? 이런 식으로해서는 안 되는가? –

+0

명령어 치환 그 자체는 배열을 제공하지 않지만 공백으로 분리 된 단어는'SERVER_STRING_ARRAY'에 대한 할당을위한 요소를 제공합니다 ('$ {($ +)') . – chepner

답변

1

until 문에 대한 조건은 단일 명령으로 제한되지 않습니다.

until SERVER_STRING_ARRAY=($(dig +noall +answer "$SERVER_DNS_NAME" SRV) 
     SERVER_PORT=${SERVER_STRING_ARRAY[6]} 
     nc -z "$SERVER_DNS_NAME" "$SERVER_PORT"; do 
    ... 
done