2009-04-19 5 views
10

나는 bash에 메이크 파일을 쓰고 있는데, 파일이 존재하고 구문이 정확하다고 생각하더라도 대상을 찾고있다. 나에게 오류를 준다. 여기 구문 오류 : end of file unexpected (예상 "fi")

내가 그 문제가되지 않습니다 그래서 내가 탭을 사용하고

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

실행하려고하고있는 스크립트입니다. (I는 입력 할 때 "읽게")

오류는

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

답변

13

시도가 cat testFile 후 세미콜론을 추가. 다른 방법

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

: 예를 들어

read: 
    test -r testFile && cat testFile 
+1

대체 솔루션이 작동하지만 if..then 구문을 사용해야합니다. 세미콜론을 추가한다고해서 문제가 해결되지 않는 것 같습니다. – Jaelebi

+0

이상한. 세미콜론으로 처음 시도했지만 작동하지 않았습니다. 두번째로 나는 그것을 작동 시켰습니다. 고마워요. – Jaelebi

+0

자기 자신에게 한 마디. 원래 메이플 파일에 여러 줄의'bash' 문장을 썼는데, 똑같은 실패를했습니다. 그리고이 대답에 따르면, 마술은 makefile을 인식하게하는 것입니다. 쉘 명령은 한 줄로; 그러므로 나는 쉘 명령을 분리하기 위해 _both_ 세미콜론';'을 필요로 할 것이다. _and_ backslash'\\'(다음 줄 바꿈 문자를 벗어나기 위해) 그것을 작동 시키려면 ... 건배! – sdaau

2

나는이 문제를 만났다.

그리고 이유는 "\"뒤에 몇 가지 설명을 추가했기 때문입니다.

5

같은 문제가 발생했습니다. 이것은을 수행해야합니다 GNU는 3.82를 확인

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

때문에, 당신은 하나의 쉘에서 대상 내의 모든 라인을 실행할 수 있도록 알려 파일의 상단에 .ONESHELL:를 추가 할 수 있습니다.

.ONESHELL: 
SHELL := /bin/bash 

foobar: 
    if true 
    then 
     echo hello there 
    fi 

documentation을 참조하십시오.

줄을 앞에 붙이거나 을 붙이거나 .ONESHELL: 아래에 .SILENT: 옵션을 추가하여 에코 선을 억제하십시오.

+0

좋은 트릭, 나는 거기에 작은 버그가 있다고 생각합니다, 첫 번째 라인은 라고해야합니다 .ONESHELL : – Hemeroc

+0

@Hemeroc 고정. – Evidlo

관련 문제