Como salvar a saída da mensagem de erro do psql na variável bash?

2

Eu tenho um script que executa várias instruções diferentes do psql. Estou tentando capturar a saída de erro do psql quando a senha digitada está incorreta. A senha é inserida antes da verificação (e quando correta, as instruções do psql são executadas com sucesso)

Eu tentei o seguinte:

pwcheck='psql -q -U postgres -h $ip -d $database;'
echo "error message: $pwcheck"

Quando eu insiro uma senha incorreta para verificar, as mensagens de erro são enviadas, mas a variável está vazia.

psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"
error message:

Idealmente, gostaria de salvar a mensagem de erro em uma variável e não imprimir minha própria mensagem de erro / prompt e não exibir os erros do psql.

Como posso armazenar uma dessas mensagens de erro em uma variável bash?

    
por Donald Peat 10.06.2017 / 00:16

1 resposta

4

Você não pode, diretamente. Pelo menos, não sem misturar ou descartar a saída padrão. No entanto, existe uma maneira!

#!/bin/bash
errorlog=$(mktemp)
trap 'rm -f "$errorlog"' EXIT
pwcheck="$(psql -q -U postgres -h $ip -d $database 2> "$errorlog")"
if [[ 0 -ne $? ]]; then
    echo "Something went wrong; error log follows:"
    cat "$errorlog"
fi
    
por 10.06.2017 / 00:19