Você deve poder usar o valor de retorno diretamente.
while ! cmd
do
...
done
Estou tentando determinar se um banco de dados foi inicializado executando uma consulta e examinando o código de saída. Se o código de saída for 0, então sei que a consulta do banco de dados foi aceita e o banco de dados deve ser inicializado.
Não consigo usar pg_isready
porque a versão postgres é anterior a 9.3, por isso desenvolvi o seguinte código:
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
A execução de $(su -l postgres -c "psql -d db_name -c 'select count(1) from table_name' > /dev/null 2>&1"
nos seus próprios retorna um código de saída de 0, no entanto, estou recebendo uma mensagem de erro quando é usado dentro do loop:
((: != 0 : syntax error: operand expected (error token is "!= 0 ")
Tags shell-script