web-dev-qa-db-ja.com

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

いくつかの異なる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:

理想的には、エラーメッセージを変数に保存し、独自のエラーメッセージ/プロンプトを表示せず、notでpsqlエラーを表示するのが理想的です。

これらのエラーメッセージのいずれかをbash変数に格納するにはどうすればよいですか?

4
Don P

直接できません。少なくとも、標準出力と混合したり、標準出力を破棄したりする必要はありません。しかし、方法はあります!

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