2009-04-19 9 views
10

मैं पार्टी में एक makefile लिख रहा हूँ और मैं एक लक्ष्य है जिसमें मैं अगर एक फ़ाइल मौजूद है और पता लगाने की कोशिश भले ही मुझे लगता है कि वाक्य रचना, मैं अभी भी सही है मुझे एक त्रुटि देता है।सिंटैक्स त्रुटि: फ़ाइल अप्रत्याशित के अंत (उम्मीद "फाई")

यहाँ स्क्रिप्ट है कि मैं

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

मैं टैब का उपयोग कर रहा हूँ ताकि एक समस्या नहीं है चलाने के लिए कोशिश कर रहा हूँ है।

त्रुटि है (जब मैं में टाइप करें: "पढ़ें")

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

बस एक नोट worked.Thanks भाग गया: मैं मूल रूप से सादे बहु 'makefile में bash' बयान में लिखा है, और एक ही विफलता था - और इस उत्तर के नोटों के रूप में, चाल makefile पहचान है एक पंक्ति के रूप में खोल कमांड; (बाद में न्यू लाइन से बचने के लिए) यह काम करने के लिए ... चीयर्स प्राप्त करने के लिए '(अलग खोल आदेशों का) _and_ बैकस्लैश' '\\, इसलिए मैं _both_ अर्धविराम' आवश्यकता होगी! – sdaau

2

मैं भी इस समस्या से मुलाकात की।

और कारण यह है कि मैंने "\" के बाद कुछ टिप्पणियां जोड़ दीं।

5

मैं एक ही मुद्दे में भाग गया। यह यह करना चाहिए:

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

के बाद से जीएनयू 3.82 बनाओ, आप एक ही खोल में एक लक्ष्य के भीतर सभी लाइनों को चलाने के लिए कर बताने के लिए फ़ाइल के शीर्ष पर .ONESHELL: जोड़ सकते हैं।

.ONESHELL: 
SHELL := /bin/bash 

foobar: 
    if true 
    then 
     echo hello there 
    fi 

documentation देखें।

@ साथ

प्रारंभ में लगा लाइनों या .ONESHELL: नीचे .SILENT: विकल्प जोड़ने गूंज लाइनों को दबाने के लिए।

+0

अच्छा चाल, मुझे लगता है कि इसमें एक छोटा सा बग, पहली पंक्ति कहना चाहिए .ONESHELL है: – Hemeroc

+0

@Hemeroc फिक्स्ड। – Evidlo

संबंधित मुद्दे