【问题标题】:How to capture MySQL syntax error in Bash, $? doesn't work on me如何在 Bash 中捕获 MySQL 语法错误,$?对我不起作用
【发布时间】:2020-02-21 03:32:53
【问题描述】:

我希望在出现 SQL 错误时找到一种“Bash”方式来捕获错误。 例如,在我的 bash 脚本中,我在 SQL 下运行时出现明显错误。 我发现一些链接建议使用“$?”,我尝试过,但由于命令已成功执行,它总是返回 0。无论如何,当 SQL 语句出错时,我可以在 Bash 中捕获错误吗?谢谢!!

sql="SELECTXX FROM DUAL"

result=$(mysql -h ${host} -u ${username} -p${password} --skip-column-names --silent --execute="${sql}")

结果:
第 1 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“SELECTXX FROM DUAL”附近使用正确的语法

【问题讨论】:

    标签: mysql linux bash shell


    【解决方案1】:

    $(command) 捕获命令的输出。

    你想要的是:

    mysql ....
    result=$?
    

    $result != 0表示错误

    【讨论】:

    • 谢谢。但问题是 $result 总是在我身上返回 0,即使我的 SQL 语句中有语法错误。有没有人真的用语法错误捕获非“0”状态的sql?
    【解决方案2】:

    尝试在命令末尾添加>/dev/null 2>&1。这会将标准错误重定向到标准输出,然后您会将错误输入结果变量。否则你只会得到标准输出。像这样:

    result=$(mysql -h ${host} -u ${username} -p${password} --skip-column-names --silent --execute="${sql}" 2>&1 > /dev/null)

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2019-03-02
      • 2017-01-18
      相关资源
      最近更新 更多