首页 > 解决方案 > 如果命令失败,我如何捕获命令的输出并将其发送到函数?

问题描述

我没有在我的 shell 脚本中使用 set -e,而是使用函数(事件)处理每个特定错误。在这种特殊情况下,如果失败,我正在尝试(插入数据库并)从 mysql 捕获任何错误。然后将其直接发送到我的事件函数中,以便我可以将其存储在日志文件中。

mysql $schema < 'structure_dump.sql' || event "8" "$schema structure insert failed:"

我认为这样做会捕获输出,但是当失败时我的错误变量显示为空,即使我仍然在我的屏幕上收到 mysql 错误消息。

err=$(mysql $schema < 'structure_dump.sql') || event "8" "$schema structure insert failed: $err"

有可能这样做还是我以错误的方式思考它?

标签: mysqlbash

解决方案


MySQL 应该报告错误,stderr但您只是在捕获stdout. stderr将(描述符 2)重定向到stdout(描述符 1)

我相信这应该对你有用:

# Push stderr into stdout in your output capture
err=$(mysql $schema < 'structure_dump.sql' 2>&1) || event "8" "$schema structure insert failed: $err"

推荐阅读