在变量中捕获bash命令错误


0

psql在bash脚本中使用(PostgreSQL)命令:

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并将其传递给变量,但是该变量为空。


一个合理的警告:psql不会返回您期望的错误代码。即使出现错误,psql也不一定会返回错误代码(返回0)。请检查手册。
Aulis Ronkainen

我建议不要ERROR在shell 中使用全大写字母的变量名(如)。有许多具有特殊含义的环境变量,如果您不小心使用了其中一个名称,则可能导致奇怪的结果。在这方面,小写和混合大小写的变量更安全。
戈登·戴维森

Answers:


3

2>ERRORstderr输出发送到名为的文件ERROR,而不是变量。请尝试以下操作:

ERROR=$(sudo -u postgres psql -c "CREATE DATABASE $1 WITH OWNER $2;" 2>&1 1>/dev/null)

无法执行此操作,因为我希望stdout变为null,并在其他地方显示不同的消息
user3541631

1
@ user3541631。我已经更新了答案,以便将stdout发送到/dev/null
md2perpe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.