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