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
相关产品推荐
相关产品推荐

