Como eu crio um “documento aqui” dentro de uma função shell?

2

Estou trabalhando na grande Linha de Comando do Linux do William Shotts Jr. no meu Mac OSX 10.7.5 sistema. 90% do linux que o Shotts cobre está perto o suficiente de Darwin que eu posso descobrir ou o GTEM para descobrir o que está acontecendo. Eu cheguei no capítulo 27 em "Writing Shell Scripts" e estou ficando preso criando "here files" dentro de uma função.

Eu recebo um erro syntax error: unexpected end of file quando incluo a seguinte função:

report_uptime () {
  cat <<- _EOF_
    <H2>System Uptime</H2>
    <PRE>$(uptime)</PRE>
    _EOF_
  return
}

O erro desaparece se eu usar o seguinte alocador de espaço de função:

report_uptime () {
  return
}

Além disso, em outro lugar do script, fora de uma função, eu uso o formato cat << _EOF_ para criar um "arquivo aqui" sem problemas:

cat << _EOF_
<HTML>
      <HEAD>
            <TITLE>$TITLE</TITLE>
      </HEAD>
      <BODY>
            <H1>$TITLE</H1>
            <P>$TIME_STAMP</P>
            $(report_uptime)
            $(report_disk_space)
            $(report_home_space)
      </BODY>
</HTML>
_EOF_

Se alguém tiver alguma ideia do que estou fazendo de errado, eu ficaria grato!

    
por BenU 24.11.2012 / 20:54

1 resposta

4

Se o operador de redirecionamento for '< < -', então, todas as guias principais os caracteres são retirados das linhas de entrada e a linha contém o delimitador. Isso permite que documentos aqui dentro de scripts de shell sejam recuados de maneira natural.

Se isso não funcionar como documentado, tente mover o token EOF para o início da linha (remover todos os espaços em branco).

    
por 24.11.2012 / 21:02