2017-10-18 8 views
1

作成、変更、バックアップ、および利用可能な4つの異なる出力を生成するAWS RDSプロセスがあります。このプロセスの出力は4〜5分ごとに変化し、最後にプロセスが完了すると、最後の出力が使用可能になります。どの変数が "dbState"に格納されていますか。 私がしようとしているのは、変数が利用可能な値になるまでスピナーを実行することです。 このため、変数の値をチェックし続ける最初の2つのループを実行する必要があります。 2番目は変数値が利用可能になるまでループとスピナーを実行し続けます。スピナー用のbashのループロジック

while :; do 
dbState=(`aws rds describe-db-instances --db-instance-identifier $Instance_Identifier --query DBInstances[*].DBInstanceStatus --output text`) 

sp='/-\|' 
printf ' ' 
sleep 0.1 
while [ "$dbState" != "available" ]; do 
    printf '\b%.1s' "Please wait.....$sp" 
    sp=${sp#?}${sp%???} 
    sleep 0.1 
done 
sleep 120 
done 

しかし、それは第二ループ内で立ち往生し、スピナーは、変数の谷が利用可能になってもまで実行し続ける何らかの理由で。 ここで私を助けてください私はそれを達成するための論理を考えることができません。 私は変数valeが利用可能になるまでスピナーを表示したいと思います。

答えて

3

まずは、内側のループに焦点を当ててみましょう:dbStateは、このループ内で更新されることはありませんか

while [ "dbState" != "available" ]; do 
    printf '\b%.1s' "Please wait.....$sp" 
    sp=${sp#?}${sp%???} 
    sleep 0.1 
done 

お知らせ?したがって、ループからの終了条件は決してありません。ループの各反復の中でRDSインスタンスの状態をチェックする必要があります。おそらく、外側のループが必要なだけで、内側のループをifステートメントに変換する必要があります。


さらに、あなたの状態にはタイプミスがあります。リテラル文字列"dbState"と文字列"available"を比較しています。 dbState変数の値を比較したいと考えています("$dbState" != "available")。 RDSインスタンスの状態が"available"なるまで待つ


注AWS CLIツールalready has a methodこと:

aws rds wait db-instance-available --db-instance-identifier $Instance_Identifier 
+0

私はまだ私はすでに待機を試みたが、それはかなり退屈に見えるスピナーを使用します。あなたの助けをくれてありがとうMark。感謝! :) –