2017-10-18 1 views
1

만들기, 수정, 백업 및 사용 가능한 4 가지 출력을 생성하는 AWS RDS 프로세스가 있습니다. 이 프로세스의 출력은 매 4 ~ 5 분마다 변경되고 마지막으로 프로세스가 완료되면 최종 출력이 사용 가능하게 생성됩니다. 어느 변수 "dbState"에 저장됩니다. 변수에 사용 가능한 값이있을 때까지 회 전자를 실행합니다. 이 경우 변수의 값을 계속 확인하는 두 개의 루프를 실행해야합니다. 변수 값을 사용할 수있을 때까지 루프와 회 전자를 계속 실행하는 두 번째.회 돌이를위한 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".

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

나는 아직도 내가 이미 대기 시도 스피너를 사용하고 싶지만 꽤 지루 :


주 RDS 인스턴스 상태가 될 때까지 대기에 대한 AWS CLI 도구 already has a method"available"입니다. 도와 주셔서 감사합니다. 감사! :) –

관련 문제