2016-08-07 16 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が最初コマンドが実行されるまでオンラインにならないかもしれないということですので、あなたはuntilコマンドが何度もを実行したいです。

ここで私の壊れたuntilコマンド(私は試して1行に入れます)です。

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ステートメントの条件は、1つのコマンドに限定されません。

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 
関連する問題