Fim de arquivo inesperado

4

Alguém pode explicar por que o final do arquivo é inesperado na linha 49? (A linha 49 é uma linha depois da última linha)

#!/bin/bash 

timeend=$(date -u +%H%M)
timestart=$(date --date "$timeend 30 minutes ago" -u +%H%M)
firsttime=0

while true
do
    if [[ $firsttime -eq 0 ]]; then
    time=$timestart
    increment=0
    fi
    if [[ $firsttime -ne true ]]; then
    increment=$(( $increment + 2 ))
    time=$(( $timestart + $increment ))
    fi
    if [[ $time -ge $timeend ]]; then
    break
    fi 

    gpnids << EOF
    RADFIL   = NEXRIII|CLT|TR0
    RADTIM   = "$time"
    TITLE    = 1/-2
    PANEL    = 0
    DEVICE   = gif|radar"$increment".gif|1280;1024|C
    CLEAR    = Y
    TEXT     = 1/2/2/hw
    COLORS   = 7
    WIND     =  
    LINE     =  
    CLRBAR   =  
    IMCBAR   = 5/v/LL/.005;.6/.4;.01
    GAREA    = dset
    MAP      = 24 + 23 + 1/1/2 + 14 + 15/1/2
    LATLON   = 0
    OUTPUT   = t

    $mapfil = lorvus.usg + hicnus.nws + hipona.nws + louhus.nws + loisus.nws
    run

    exit
    EOF
    firsttime=1

    gpend

 done
    
por WxPilot 19.06.2014 / 18:11

3 respostas

12

Você também deve ter recebido outro erro, que talvez seja mais informativo:

  

/home/terdon/scripts/b.sh: linha 49: aviso: aqui-documento na linha 21 delimitada pelo fim do arquivo (desejado 'EOF')

     

/home/terdon/scripts/b.sh: linha 50: erro de sintaxe: fim de arquivo inesperado

Seu erro é que você tem espaços antes da string que termina o heredoc. Para dar um exemplo simples, isso se queixa:

#!/bin/bash 

cat << EOF
   hello
   EOF

Mas isso não acontece:

#!/bin/bash 

cat << EOF
   hello
EOF
    
por terdon 19.06.2014 / 18:20
9

Eu recebo duas linhas que devem ajudá-lo a descobrir o que está acontecendo:

./test: line 48: warning: here-document at line 21 delimited by end-of-file (wanted 'EOF')
./test: line 49: syntax error: unexpected end of file

Sua construção heredoc ( << EOF ) está formada incorretamente. É sensível a espaços em branco, para que você possa retirá-lo:

...
    command <<EOF
        ...
EOF

Ou deixe-o saber que você está acompanhando (e deve ser uma guia ):

...
    command <<-EOF
        ...
    EOF

Eu prefiro o segundo porque ele permite que você estruture o script muito melhor ... Algo que seu script já possa se beneficiar.

    
por Oli 19.06.2014 / 18:23
0

Se você estiver usando o vim ou vi tente usar o comando

:set list

Você poderá ver espaços entre o símbolo $

Às vezes, é útil descobrir algum comportamento inesperado.
 Nesse caso, exclua os espaços em branco que terminaram o trabalho.

    
por whale 12.07.2015 / 15:44

Tags