Как сохранить вывод сообщения об ошибке 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: 

В идеале я хотел бы сохранить сообщение об ошибке в переменной и не печатать собственное сообщение об ошибке / приглашение и вообще не отображать 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