Até que o loop não feche

1

Estou usando o AWS CLI com o bash para criar e copiar instantâneos de RDS. Eu tenho um loop até executando com a condição de que uma vez que o status do instantâneo esteja "disponível" o loop deve fechar e executar o código adicional para copiar o instantâneo. No entanto, vejo no console da AWS que o status está disponível, mas o script continua a travar, portanto, o loop não está saindo como deveria. O que estou fazendo errado no meu loop?

Código:

#/bin/bash/

now=$(date '+%Y-%m-%d-%H')

# Creates DB snapshot
echo ---------------------------------------- >> create_snap.txt
echo Start time:  >> create_snap.txt
date >> create_snap.txt

aws rds create-db-snapshot --db-instance-identifier db --db-snapshot-identifier test-for-dr-$now

while true; do
STATUS='aws rds describe-db-snapshots --db-snapshot-identifier test-for-$now | grep "Status" | awk '{print $2}' | sed 's/[",]//g''

until [ "$STATUS" == "available" ]; do
  echo "" &> /dev/null

  if [ "$STATUS" == "available" ]; then
    break 2
  fi
  done
done

echo Completion time: >> create_snap.txt
date >> create_snap.txt
echo ---------------------------------------- >> create_snap.txt
echo "" >> create_snap.txt

Qualquer ajuda seria apreciada!

    
por N.M.D 01.03.2017 / 18:08

1 resposta

2

Retomando os vários comentários, você deve modificar o script para algo assim:

#/bin/bash/

now=$(date '+%Y-%m-%d-%H')

# Creates DB snapshot
echo ---------------------------------------- >> create_snap.txt
echo Start time:  >> create_snap.txt
date >> create_snap.txt

aws rds create-db-snapshot --db-instance-identifier db --db-snapshot-identifier test-for-dr-$now

while true; do
  STATUS='aws rds describe-db-snapshots --db-snapshot-identifier test-for-$now | grep "Status" | awk '{print $2}' | sed 's/[",]//g''

  if [ "$STATUS" == "available" ]; then
    break
  else
    echo "" &> /dev/null
  fi

  sleep 15

done

echo Completion time: >> create_snap.txt
date >> create_snap.txt
echo ---------------------------------------- >> create_snap.txt
echo "" >> create_snap.txt

Como você pode ver, existe um único loop, a variável $ STATUS é atualizada no loop e existe um sleep 15 para evitar martelar a API

    
por 01.03.2017 / 18:37