Перехват ошибки команды bash в переменной

331
user3541631

Я использую psql(PostgreSQL) команду в скрипте bash:

function create_database () { sudo -u postgres psql -c "CREATE DATABASE $1 WITH OWNER $2;" 2>ERROR if [[ $? -ne 0]; then echo "error -> $ERROR" return 1 else: .... return 0 } 

Я пытаюсь поймать errorи передать его в переменную, но переменная пуста.

0
Справедливое предупреждение: psql не возвращает коды ошибок, как вы ожидаете. Даже при наличии ошибки psql не обязательно возвращает код ошибки (возвращает 0). Пожалуйста, проверьте руководство. Aulis Ronkainen 6 лет назад 0
Я рекомендую не использовать имена переменных всех заглавных букв (например, `ERROR`) в оболочке. Существует множество переменных окружения со специальным значением, и если вы случайно используете одно из этих имен, это может вызвать странные последствия. Переменные в нижнем и смешанном регистре в этом отношении более безопасны. Gordon Davisson 6 лет назад 0

1 ответ на вопрос

3
md2perpe

2>ERRORотправляет stderrвывод в файл с именем ERROR, а не в переменную. Попробуйте следующее:

ERROR=$(sudo -u postgres psql -c "CREATE DATABASE $1 WITH OWNER $2;" 2>&1 1>/dev/null) 
я не могу сделать это, потому что я хочу, чтобы стандартный вывод перешел на ноль, и покажу другое сообщение user3541631 6 лет назад 0
@ User3541631. Я обновил свой ответ, чтобы стандартный вывод отправлялся в `/ dev / null`. md2perpe 6 лет назад 1