bash変数にpsqlエラーメッセージの出力を保存する方法は?

bash変数にpsqlエラーメッセージの出力を保存する方法は?

いくつかの異なるpsql文を実行するスクリプトがあります。入力したパスワードが正しくないときにpsqlのエラー出力をキャプチャしようとしています。確認する前にパスワードを入力してください(正しい場合はpsql文が正常に実行されます)。

私は以下を試しました:

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

確認のために間違ったパスワードを入力するとエラーメッセージが出力されますが、変数は空です。

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

理想的には、エラーメッセージ/プロンプトを印刷するのではなく、エラーメッセージを変数に保存したいと思います。いいえpsql エラー全体を表示します。

これらのエラーメッセージをbash変数にどのように保存できますか?

ベストアンサー1

直接言うことはできません。少なくとも標準出力と混ぜたり、標準出力を廃棄したりしないでください。しかし、方法があります!

#!/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

おすすめ記事