Jak korzystać z heredoc w funkcji bash?

12

Czy można wstawić heredoc do funkcji bash?

Poniższa trywialna próbka powoduje błąd: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

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

my_function

Środowisko:

  • Ubuntu 11.04 (GNU / Linux 2.6.38-8-server x86_64)
  • GNU bash, wersja 4.2.8 (1) -release (x86_64-pc-linux-gnu)
Leftium
źródło
Miałem wrażenie, że heredoc to perl. Czy istnieje powód, by sądzić, że zadziała w BASH?
jdw
@jdw, tutaj dokumenty są obecne w wielu językach, w tym bash.
Zoredache
Teraz to widzę. Chłodny.
jdw

Odpowiedzi:

10

Twój kod wyglądał dla mnie dobrze, więc skopiowałem go wiersz po wierszu i działał dla mnie:

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

Czy możliwe jest ręczne przepisanie pliku, aby upewnić się, że go nie brakuje lub dodania spacji / tabulatorów itp.?

Jak to robisz? Zrobiłem chmod +x test.shi wtedy./test.sh

EDYCJA: Otrzymałem taki sam błąd jak ty, gdy dodałem spację na początku linii zamykającym HEREDOC.

Dodatkowa uwaga: HEREDOCPowoduje to również spływ końcowy za zamknięciem

David
źródło
1
Dziwne, działa teraz ... Podświetlanie składni kolorów Vima rozpoznało HEREDOC wcześniej (nie dzieje się tak, jeśli dodasz tę przestrzeń przed zamknięciem HEREDOC) Zmodyfikowałem oryginalny skrypt, aby po prostu używał zewnętrznego pliku, więc nie jestem pewien, co było źle. Jednak z heredocami będzie znacznie wygodniej!
Leftium
1
W rzeczy samej! Uwielbiam trochę heredoków.
David
1
Dodatkowo: HEREDOCPowoduje to również
spływ