Где проблема с линией EOF? - PullRequest
0 голосов
/ 19 июня 2019

Я перешел с 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 Ответ

3 голосов
/ 19 июня 2019

Если вы хотите сделать отступ для ограничителя here-doc, вы должны изменить << на <<-. Вы должны использовать вкладки для отступа вашего кода, пробелы не работают. Обратите внимание, что ) не следует за EOF; это потому что bash не может закрыть $() в противном случае.

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