Quando você usa o operador <<- EOF , o delimitador EOF deve ser precedido por TABs somente (ou estar no início da linha), não em espaços. Uma linha que consiste em <space>EOF ou <space><TAB>EOF não é vista como delimitador.
Em:
... <<- EOF
<TAB>line1
<TAB>line2\
<TAB>continued
<TAB>line3
<TAB>EOF
As principais TABs (acima representadas como <TAB> ) são removidas (exceto a linha lógica line2 continuada nas próximas linhas físicas, exceto em versões antigas de zsh antes de ser corrigida) antes da EOF é procurado.
Então, você precisaria remover todos os caracteres de espaço antes do delimitador _EOF_ . Ou melhor, evite <<- e use o _EOF_ no início da linha (certificando-se de que não seja seguido por espaços em branco). Pessoalmente, eu não gosto da ideia de uma linguagem onde a sintaxe depende da quantidade de espaços, essa é a principal coisa que eu também não gosto em python .