Como usar um heredoc dentro de uma função bash?

12

É possível inserir um heredoc dentro de uma função bash?

A amostra trivial abaixo resulta em um erro: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

Meio Ambiente:

  • Ubuntu 11.04 (GNU / Linux 2.6.38-8-server x86_64)
  • Lançamento do GNU bash, versão 4.2.8 (1) (x86_64-pc-linux-gnu)
Leftium
fonte
Fiquei com a impressão de que heredoc era uma coisa do Perl. Existe alguma razão para acreditar que funcionaria no BASH?
JDW
@ jdw, aqui os documentos estão presentes em vários idiomas, incluindo o bash.
precisa
Eu vejo isso agora. Legal.
Jdw #

Respostas:

10

Seu código parecia bom para mim, então copiei linha por linha e funcionou para mim:

  • Lançamento do OSX 10.7, bash 3.2.48 (1) (x86_64-apple-darwin11).
  • Lançamento do Ubuntu 10.04.3, bash 4.1.5 (1) (x86_64-pc-linux-gnu)

É possível redigitar o arquivo manualmente apenas para garantir que você não esteja faltando ou adicione espaços / guias / etc?

Além disso, como você está executando? Eu fiz um chmod +x test.she depois./test.sh

EDIT: Recebi o mesmo erro que você quando adicionei um espaço no início da linha com o fechamento do HEREDOC.

Nota adicional: Um espaço à direita atrás do fechamento HEREDOCtambém pode causar

David
fonte
1
Estranho, ele funciona agora ... O destaque da sintaxe de cores do Vim reconheceu o HEREDOC antes (não adiciona esse espaço antes do fechamento do HEREDOC). Modifiquei o script original para usar apenas um arquivo externo, por isso não tenho certeza do que estava errado. Porém, será muito mais conveniente com os heredocs!
Leftium
1
De fato! Eu amo-me alguns heredocs.
David
1
Além disso: Um espaço à direita por trás do fechamento HEREDOCtambém podem causar isso (Este tipo de erros são realmente difíceis de rastrear suspiro..)
0laf