【发布时间】:2019-11-02 09:27:35
【问题描述】:
我已经从 SuSE 更改为 RHEL 并尝试使用相同的代码,我相信我遇到了一些与身份相关的错误。 SuSE 使用的是 bash3,而 RHEL 它使用的是 bash4。
错误信息:
-bash: test.sh: line 9: unexpected EOF while looking for matching `)'
-bash: test.sh: line 21: syntax error: unexpected end of file
当我改变时:
EOF)
为此(删除标签):
EOF)
工作正常。我理解这个问题,但我想了解为什么它在 SuSE 和 RHEL 上运行良好,但不是。关键是在代码中进行更改将花费大量时间和工作,那么有没有办法通过 unix session 或一些配置来解决这个问题?
#!/bin/bash
result=$(sqlplus -S /nolog << EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE;
Connect $ORACLE_USER/$(sh /bin/encrypt.sh -d "$ORACLE_PASS")@${HOST}:${PORT}/${HOST}
set heading off
set line 1000
$QUERY;
EXIT;
EOF)
result=$(echo $result | tail --lines=1)
echo $result
return $result
}
【问题讨论】:
-
回复:“在代码中更改此内容将花费大量时间和工作”:这让我感到惊讶。您的脚本可能有多少个 heredocs?
-
你使用制表符还是空格来缩进?另外,请查看 heredocs 的
-EOF选项 -
同一行上的
)也可能是个问题。 -
另外,
return不应该返回一个值(即使您正在计算一个介于 0 和 255 之间的值);它应该提供一个退出状态。无论如何,您的脚本似乎迫切需要重写,因此我不会为任何解决方法而烦恼。修复你的脚本。 -
bash3 和 4 之间的一个相关变化是bash3 对在输入文件末尾终止的 here 文档更加宽容(在这种情况下,这是由命令引起的替代)。bash4 更坚持在文件结束之前正确终止此处的文档。