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

Shell脚本调用环境文件报错:意外的文件结束语法错误

问题解决办法

1. 修复Here Document语法错误

Shell的Here Document(<<标记)要求结束标记必须单独占一行,且顶格书写,不能有任何前导空格或缩进。你的脚本中如果结束标记SQL前面有空格/缩进,就会触发"here document delimited by end of file"警告和语法错误。

修正后这部分代码如下:

"${RUN_PSQL}" <<SQL
select count(1) from my_table
SQL

注意最后一行的SQL必须顶格,前后不能有任何字符(包括空格)。

2. 正确加载环境文件

你当前的export MYPATH ="C/Documents/my_env.env":$MYPATH存在两个错误:

  • 变量赋值时等号不能有空格,Shell会把MYPATH和="C/..."当成两个独立命令
  • 该写法是把环境文件路径加到MYPATH变量,而非加载环境文件内容

正确加载环境文件的方式是用source(或.)命令,替换掉错误的export行:

# 加载环境变量文件
source C/Documents/my_env.env

这样环境文件里的PGHOST、PGPORT等变量会被导入当前Shell环境,供psql使用。

3. 安全引用命令变量

RUN_PSQL变量包含带空格的命令参数,直接用${RUN_PSQL}可能导致参数拆分错误,建议用双引号包裹:

"${RUN_PSQL}" <<SQL

完整修正后的脚本

#!/bin/bash
# 加载环境变量文件
source C/Documents/my_env.env

# 检查psql是否存在
if ! command -v psql > /dev/null ; then
  echo "This script requires psql to be installed and on your PATH. Exiting"
  exit 1
fi

RUN_PSQL="psql -X --set AUTOCOMMIT=off --set ON_ERROR_STOP=on "

"${RUN_PSQL}" <<SQL
select count(1) from my_table
SQL

内容的提问来源于stack exchange,提问作者Udayasoorian CN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:05:08