【问题标题】:Where´s the Issue with the EOF line?EOF线的问题在哪里?
【发布时间】: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 之间的值);它应该提供一个退出状态。无论如何,您的脚本似乎迫切需要重写,因此我不会为任何解决方法而烦恼。修复你的脚本。
  • bash 3 和 4 之间的一个相关变化是 bash 3 对在输入文件末尾终止的 here 文档更加宽容(在这种情况下,这是由命令引起的替代)。 bash 4 更坚持在文件结束之前正确终止此处的文档。

标签: bash heredoc


【解决方案1】:

如果要缩进 here-doc 分隔符,应将 &lt;&lt; 更改为 &lt;&lt;-。您必须使用制表符来缩进您的代码,空格不起作用。请注意) 不遵循EOF;那是因为 bash 无法关闭 $() 否则。

VAL=$(cat <<-EOF
        derp
        EOF
)
echo "$VAL"
exit 0

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多