Come usare un heredoc all'interno di una funzione bash?


12

È possibile inserire un heredoc all'interno di una funzione bash?

L'esempio banale di seguito genera un errore: ./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-server x86_64)
  • GNU bash, versione 4.2.8 (1) -release (x86_64-pc-linux-gnu)

Avevo l'impressione che l'eredità fosse una cosa del Perl. C'è qualche motivo per credere che funzionerebbe in BASH?
jdw,

@jdw, qui i documenti sono presenti in molte lingue tra cui bash.
Zoredache,

Lo vedo adesso. Freddo.
jdw,

Risposte:


10

Il tuo codice mi è sembrato perfetto, quindi l'ho copiato riga per riga e ha funzionato per me su:

  • 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)

È possibile riscrivere il file manualmente solo per assicurarsi che non manchi o aggiungere spazi / tab / etc?

Inoltre, come lo stai eseguendo? Ho fatto un chmod +x test.she poi./test.sh

EDIT: ho ricevuto lo stesso errore da te quando ho aggiunto uno spazio all'inizio della riga con il HEREDOC di chiusura.

Nota ulteriore: anche uno spazio finale dietro la chiusura HEREDOCpuò causare questo


1
Strano, ora funziona ... L'evidenziazione della sintassi dei colori di Vim ha riconosciuto prima HEREDOC (non lo è se aggiungi lo spazio prima della chiusura di HEREDOC) Ho modificato lo script originale per usare solo un file esterno, quindi non sono sicuro di cosa era sbagliata. Sarà molto più conveniente con heredocs, però!
Leftium,

1
Infatti! Mi piacciono alcuni heredocs.
David,

1
Inoltre: uno spazio finale dietro la chiusura HEREDOCpuò anche causare questo (questo tipo di errori è davvero difficile da rintracciare.
Sigh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.