Неожиданный конец файла

Может кто-нибудь объяснить, почему конец файла неожиданный в строке 49? (Строка 49 - одна строка после последней строки)

#!/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
4
задан 19 June 2014 в 20:11

4 ответа

Необходимо было также получить другую ошибку, которая, возможно, более информативна:

/home/terdon/scripts/b.sh: строка 49: предупреждение: здесь-документ в строке 21 разграниченный к концу файла (хотел 'EOF')

/home/terdon/scripts/b.sh: строка 50: синтаксическая ошибка: неожиданный конец файла

, которым Ваша ошибка состоит в том, что у Вас есть пробелы перед строкой, которая заканчивает heredoc. Для взятия простого примера это жалуется:

#!/bin/bash 

cat << EOF
   hello
   EOF

, Но это не делает:

#!/bin/bash 

cat << EOF
   hello
EOF
12
ответ дан 19 June 2014 в 20:11

Я получаю две строки, которые должны помочь Вам разработать то, что продолжается:

./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

Ваш heredoc (<< EOF) конструкция неправильно формируется. Это - пробел, чувствительный так Вы любая полоса это назад:

...
    command <<EOF
        ...
EOF

Или сообщают ему, Вы снабжаете вкладками его (и это должна быть вкладка ):

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

я предпочитаю второе, потому что это позволяет Вам структурировать сценарий намного лучше... Что-то Ваш сценарий могло уже извлечь выгоду из.

10
ответ дан 19 June 2014 в 20:11

Если Вы используете энергию, или vi пытаются использовать команду

:set list

, Вы сможете видеть пробелы между символом $

Иногда, Это пригодилось для выяснения некоторого неожиданного поведения.
В этом случае удаляют пробелы, закончил задание.

0
ответ дан 19 June 2014 в 20:11

Конец Файла, предупреждающего

%>: строка 49: предупреждение: здесь-документ в строке 21 разграниченный к концу файла (хотел 'EOF')

  • heredoc ищет разделитель (конечный тэг), в этом случае EOF
  • это никогда никогда не распознается в Вашем примере, потому что это снабжается префиксом пробелами
  • , конец фактического файла достигнут, никогда не находя разделитель; следовательно предупреждение

Это может быть обращено путем удаления пробелов, или как , Terndon указывает вкладки использования - я не знал этот

<час>

Другой

Другая распространенная ошибка для конца ошибки файла, которая происходит, занимается пробельными проблемами. Обычно от копирования кода, онлайн форматированного для Windows и выполнения его в Linux.

Это может быть обращено путем выполнения dos2unix на файле для быстрого преобразования тех символов.

1
ответ дан 7 October 2019 в 15:36

Другие вопросы по тегам:

Похожие вопросы: