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

9

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

O exemplo 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

Ambiente:

  • Ubuntu 11.04 (GNU / Linux 2.6.38-8-servidor x86_64)
  • GNU bash, versão 4.2.8 (1) -release (x86_64-pc-linux-gnu)
por Leftium 22.11.2011 / 03:27

1 resposta

8

Seu código pareceu bem para mim, então copiei linha para linha e funcionou para mim em:

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

É possível redigitar o arquivo manualmente apenas para ter certeza de que não está faltando ou adicionando espaços / guias / etc?

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

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

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

    
por 22.11.2011 / 03:36

Tags