Ошибка синтаксиса: неожиданный конец файла (ожидающий "fi" )

Я пишу makefile в bash, и у меня есть цель, в которой я пытаюсь найти, существует ли файл, и хотя я считаю, что синтаксис верен, я все равно выдаю ошибку.

Вот script, который я пытаюсь запустить

read: 
        if [ -e testFile] ; then \ 
        cat testFile\ 
        fi

Я использую вкладки, поэтому это не проблема.

Ошибка (при вводе: "make read" )

if [ -e testFile] ; then \
        cat testFile \
        fi
/bin/sh: Syntax error: end of file unexpected (expecting "fi")
make: *** [read] Error 2

Ответ 1

Попробуйте добавить точку с запятой после cat testFile. Например:

read: 
    if [ -e testFile ] ; then  cat testFile ; fi

в качестве альтернативы:

read:
    test -r testFile && cat testFile

Ответ 2

Я столкнулся с той же проблемой. Это должно сделать это:

file:
    @if [ -e scripts/python.exe ] ; then \
    echo TRUE ; \
    fi

Ответ 3

Я также встретил эту проблему.

И причина в том, что я добавил некоторые комментарии после "\".

Ответ 4

Так как GNU Make 3,82, вы можете добавить .ONESHELL: в начало файла, чтобы сообщить make, чтобы запустить все строки внутри цели в одной оболочке.

.ONESHELL:
SHELL := /bin/bash

foobar:
    if true
    then
        echo hello there
    fi

См. документацию .

Подготовить строки с помощью @ или добавить параметр .SILENT: под .ONESHELL: для подавления эхо-строк.