2017-10-18 27 views
1

J'ai un processus AWS RDS qui génère 4 sorties différentes en tant que création, modification, sauvegarde et disponibilité. Cette sortie du processus change toutes les 4 à 5 minutes et, une fois le processus terminé, génère la dernière sortie disponible. Quel est le stockage dans une variable "dbState". Ce que j'essaie de faire est d'exécuter un spinner jusqu'à ce que la variable a la valeur disponible. Pour cela, je vais devoir exécuter deux boucles dont la première vérifie la valeur de la variable. 2ème qui continue d'exécuter la boucle et spinner jusqu'à ce que la valeur de la variable devient disponible.Logique de boucle dans bash pour spinner

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 

Mais pour une raison quelconque, il se coince dans la 2ème boucle et fileuse continue de fonctionner même jusqu'à ce que la vale de la variable devient disponible. S'il vous plaît aidez-moi ici je ne peux pas penser à une logique pour y parvenir. Tout ce que je veux montrer spinner jusqu'à la variable variable devient disponible.

Répondre

3

Tout d'abord, concentrons-nous sur la boucle intérieure:

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

Remarquez comment dbState est jamais mis à jour dans cette boucle? Il n'y a donc jamais de condition de sortie de la boucle. Vous devez vérifier l'état de l'instance RDS à l'intérieur de chaque itération de la boucle, vous n'avez donc probablement besoin que de la boucle externe et de convertir la boucle interne en une instruction if.


De plus, vous avez une faute de frappe dans votre état. Vous comparez la chaîne littérale "dbState" à la chaîne "available". Je crois que vous voulez comparer la valeur de la variable dbState, qui serait: "$dbState" != "available".


Notez que l'outil AWS CLI already has a method pour attendre jusqu'à ce qu'un état de l'instance RDS est "available":

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

Je veux encore utiliser le bouton rotatif je l'ai déjà essayé d'attendre, mais il semble assez ennuyeux. Merci pour votre aide Mark. Apprécié! :) –