2009-04-19 11 views
10

Estoy escribiendo un archivo MAKE en bash y tengo un objetivo en el que trato de encontrar si existe un archivo y, aunque creo que la sintaxis es correcta, todavía me da un errorError de sintaxis: final del archivo inesperado (esperando "fi")

Aquí está el script que estoy tratando de ejecutar

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

estoy usando pestañas de manera que no es un problema.

El error es (cuando escribo en: "hacer leer")

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

Respuesta

13

trate de añadir un punto y coma después cat testFile. Por ejemplo:

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

alternativamente:

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

la solución alternativa funciona pero tengo que usar la sintaxis if..then. agregar un punto y coma no parece resolver el problema. – Jaelebi

+0

Extraño. Lo intenté la primera vez con punto y coma y no funcionó. La segunda vez que lo ejecuté funcionó. Gracias – Jaelebi

+0

Solo una nota para mí: originalmente escribí declaraciones 'bash' de líneas múltiples en el archivo MAKE, y tuve el mismo error, y como esta respuesta indica, el truco es hacer que el archivo MAKE reconozca el comando de shell como una sola línea; por lo tanto, necesitaría _both_ punto y coma ';' (para separar comandos de shell) _y_ barra invertida '\\' (para escapar de la nueva línea siguiente) para que funcione ... ¡Saludos! – sdaau

2

I también se reunió este problema.

Y la razón es que agregué algunos comentarios después de la "\".

5

Me encontré con el mismo problema. Esto debe hacerlo:

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

Desde GNU Make 3.82, se puede añadir .ONESHELL: a la parte superior del archivo de decirle a hacer funcionar todas las líneas dentro de un objetivo en una sola concha.

.ONESHELL: 
SHELL := /bin/bash 

foobar: 
    if true 
    then 
     echo hello there 
    fi 

Ver el documentation.

Anteponga las líneas con @ o agregue la opción .SILENT: debajo de .ONESHELL: para suprimir las líneas repetitivas.

+0

buen truco, creo que hay un pequeño error en él, la primera línea debería decir .ONEHELL: – Hemeroc

+0

@Hemeroc Fixed. – Evidlo

Cuestiones relacionadas