2010-09-18 7 views
15

मैं एक Makefile अंदर निम्नलिखित कोड है:मेकफ़ाइल - रीड कमांड उपयोगकर्ता इनपुट को क्यों नहीं पढ़ रहा है?

# Root Path 
echo "What is the root directory of your webserver? Eg. ~/Server/htdocs" ; 
read root_path ; 
echo $root_path ; 
if [ ! -d $root_path ] ; then \ 
    echo "Error: Could not find that location!" ; exit 1 ; \ 
fi 

लेकिन जब कुछ भी टाइप (। उदाहरण के लिए "asd") यह क्या वापस आ जाता है:

What is the root directory of your webserver? Eg. ~/Server/htdocs 

asd 
oot_path 
Error: Could not find that location! 

जब मैं देखने की अपेक्षा करेंगे क्या होगा हो:

What is the root directory of your webserver? Eg. ~/Server/htdocs 

asd 
asd 
Error: Could not find that location! 

मैं इसे कैसे ठीक करूं ???

+0

इस प्रश्न के लिए वोटिंग क्योंकि मुझे लगता है कि यह शायद बार-बार आता है, लेकिन देखें कि ग्रेग, जॉन और डेनीथ वास्तव में ऐसा करने के बारे में क्या कहते हैं: * कुल्हाड़ी हत्या जो आपके कोड को आगे रखती है ** ** ** इस तरह नहीं होगी। * – dmckee

उत्तर

19

तत्काल समस्या यह है कि खुद को खोलने से $ अलग-अलग व्याख्या करता है। प्रयास करें:

echo "What is the root directory of your webserver? Eg. ~/Server/htdocs"; \ 
    read root_path; \ 
    echo $$root_path 

डबल $$ निकल जाता मेक के लिए $, तो यह खोल करने के लिए के माध्यम से एकल $ गुजरता है। ध्यान दें कि आपको \ लाइन निरंतरता का उपयोग करने की आवश्यकता होगी ताकि संपूर्ण अनुक्रम एक शेल स्क्रिप्ट के रूप में निष्पादित किया जा सके, अन्यथा प्रत्येक पंक्ति के लिए नया खोल बनायेगा। इसका मतलब यह है कि जैसे ही आप read खो देंगे जैसे ही उसका खोल निकलता है।

मैं यह भी कहूंगा कि सामान्य रूप से, मेकफ़ाइल से इंटरैक्टिव इनपुट के लिए संकेत करना असामान्य है। वेब सर्वर रूट निर्देशिका को इंगित करने के लिए आप कमांड लाइन स्विच का उपयोग कर बेहतर हो सकते हैं।

+4

"इंटरैक्टिव इनपुट के लिए संकेत असामान्य" विचार को सेकेंड करना। हर बार जब आप 'मेक' टाइप करते हैं तो आप एक प्रॉम्प्ट का जवाब नहीं देना चाहते हैं। –

+1

मैं एस/असामान्य/घृणित/होगा। यही है 'कॉन्फ़िगर करें' स्क्रिप्ट और चर बनाने के लिए – Daenyth

+0

धन्यवाद! मैंने हमेशा सोचा कि मेकफ़ाइल सिर्फ शैल स्क्रिप्ट की महिमा कर रहे थे, लेकिन यह निश्चित रूप से अन्यथा दिखाता है। निश्चित रूप से उनके उपयोग के मामलों पर पुनर्विचार करना होगा। @ डेनथ, स्क्रिप्ट कॉन्फ़िगर करके आपका क्या मतलब है? क्या वे कुछ खास हैं ??? – balupton

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