いくつかの異なる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変数に格納するにはどうすればよいですか?
直接できません。少なくとも、標準出力と混合したり、標準出力を破棄したりする必要はありません。しかし、方法はあります!
#!/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