EOF系列的问题在哪里?

时间:2019-06-19 15:17:32

标签: bash heredoc

我已经从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会话或某些配置问题?

#!/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
}

1 个答案:

答案 0 :(得分:3)

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

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