如何在bash变量中保存psql错误消息输出?

Don*_*n P 5 bash shell-script error-handling postgresql variable

我有一个运行多个不同 psql 语句的脚本。当输入的密码不正确时,我试图从 psql 捕获错误输出。检查前输入密码(正确后psql语句执行成功)

我尝试了以下方法:

pwcheck=`psql -q -U postgres -h $ip -d $database;`
echo "error message: $pwcheck"
Run Code Online (Sandbox Code Playgroud)

当我输入错误的密码进行检查时,会输出错误消息但变量为空。

psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"
error message:
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将错误消息保存到变量中,而不是打印我自己的错误消息/提示,也根本不显示 psql 错误。

如何将这些错误消息中的任何一个存储在 bash 变量中?

Dop*_*oti 6

你不能,直接。至少,不是没有将其与标准输出混合或丢弃。不过,有办法!

#!/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
Run Code Online (Sandbox Code Playgroud)