You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian系统Bash v5.1.4脚本函数执行报错:意外文件结束(期待"}")

问题排查与解决

核心错误原因

你的脚本存在两个关键语法问题,导致shell无法正确解析:

  1. Here-Document 未闭合:使用<< MY_QUERY开启了here-document输入块,但没有用MY_QUERY单独一行结束该块,导致shell无法识别输入边界,进而干扰了后续函数闭合符号的解析。
  2. 函数结构不完整:原脚本中函数的闭合}位置错误,且被未闭合的here-document打断。

另外还有一个潜在的MySQL命令参数错误:--password new_db的写法会让MySQL把new_db当作密码而非数据库名,导致连接逻辑错误。

修复后的脚本

#!/bin/bash

create_function() {
        echo "use root"
        # 修正MySQL参数,并用顶格的MY_QUERY闭合here-document
        mysql --user=root -p -D new_db << MY_QUERY
        SHOW tables;
MY_QUERY
}

create_function

修复细节说明

  • 闭合Here-Document:在SQL语句SHOW tables;(补充SQL分号符合语法规范)之后,单独一行顶格写MY_QUERY,这是here-document必须的结束标识,不能有缩进。
  • 修正MySQL命令:
    • 用-p替代--password,会触发交互式密码输入(更安全,避免密码暴露在命令行);如果需要硬编码密码,可写为--password=你的密码。
    • 用-D new_db明确指定要连接的数据库,避免参数歧义。
  • 调整函数结构:确保函数的闭合}在here-document结束符之后,让shell能正确识别函数的完整范围。

执行建议

执行脚本时尽量用bash create_db.sh而非sh create_db.sh,因为Debian中sh默认指向dash,而脚本开头指定了#!/bin/bash,用bash执行更符合预期。

内容的提问来源于stack exchange,提问作者Jamie Morrissey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:07:42