while 루프에서 데이터베이스 쿼리

while 루프에서 데이터베이스 쿼리

쿼리를 실행하고 종료 코드를 확인하여 데이터베이스가 초기화되었는지 확인하려고 합니다. 종료 코드가 0이면 데이터베이스 쿼리가 승인되었으며 데이터베이스를 초기화해야 한다는 것을 의미합니다.

pg_isreadyPostgres 버전이 9.3 이전이라 사용할 수 없어서 다음과 같은 코드를 개발했습니다.

while (( $(su -l postgres -c "psql -d db_name -c 'select count(1) from table_name' > /dev/null 2>&1") != 0 )) 
        do
            echo "waiting for database to initialise"
            sleep 10
        done

$(su -l postgres -c "psql -d db_name -c 'select count(1) from table_name' > /dev/null 2>&1"단독으로 실행하면 종료 코드 0이 반환되지만 루프에서 사용하면 오류 메시지가 나타납니다.

((: != 0 : syntax error: operand expected (error token is "!= 0 ")

답변1

반환 값을 직접 사용할 수 있어야 합니다.

while ! cmd
do
    ...
done

관련 정보