PATH का उद्देश्य क्या है?
यह है कि आपके शेल को प्रोग्राम कैसे मिलते हैं। जब आप लिखते हैं ls, उदाहरण के लिए, वह एक प्रोग्राम चला रहा है , जो मैक ओएस एक्स सहित अधिकांश प्रणालियों पर lsरहता है। /binआपका शेल केवल वही खोज सकता है क्योंकि /binवह अंदर है PATH।
शेल PATHक्रम में प्रोग्राम के लिए खोज करता है , बाएं से दाएं। यदि lsआपके सिस्टम पर दो कार्यक्रम हैं , और उनकी निर्देशिका आपके दोनों में है PATH, तो यह आपके द्वारा पहले सूचीबद्ध की गई निर्देशिका में एक मिलेगा PATH।
/ Etc / पाथ और ~ / .bash_profile में क्या अंतर है
मैक ओएस एक्स पर सभी गोले में स्टार्टअप पर निर्धारित पथ /etc/pathsजोड़े जाते हैं।PATH
~/.bash_profileस्टार्टअप पर बैश द्वारा चलाए जा रहे कई शेल स्क्रिप्ट में से सिर्फ एक है, और इनमें से कई बैश-विशिष्ट हैं। इसलिए, यदि आप अपना शेल बदलते हैं - मैक ओएस एक्स भी जहाजों tcshऔर zsh, उदाहरण के लिए - /etc/bashrcआपके नए शेल पर लागू नहीं किए गए परिवर्तन ।
इसके अलावा, /etc/pathsएक सिस्टम-स्तरीय कॉन्फ़िगरेशन फ़ाइल है, जबकि ~/.bash_profileप्रति उपयोगकर्ता है। यदि आपके पास अपने मैक पर कई इंटरएक्टिव उपयोगकर्ता हैं, तो आप उन निर्देशिकाओं को जोड़ना नहीं चाहेंगे /etc/pathsजिन्हें आप हर किसी में नहीं दिखाना चाहते हैं PATH। यह सच है /etc/bashrcकि सिवाय इसके कि केवल उन उपयोगकर्ताओं पर लागू होता है जो बैश को अपने शेल के रूप में उपयोग करते हैं।
PATH और $ PATH और $ {PATH} में क्या अंतर है?
जब आप वैरिएबल सेट कर रहे होते हैं तो आप आमतौर पर केवल सर्जन के बिना वेरिएबल देखते हैं। स्ट्रिंग के लिए पर्यावरण चर FOO=barसेट करता FOOहै bar। यदि आप टाइप करते हैं set, तो शेल आपको सभी पर्यावरण चर दिखाता है, और उस स्थिति में आप चर को बिना किसी सतर्कता के भी देखते हैं।
$PATHऔर ${PATH}आम तौर पर विनिमेय हैं। वे शेल को वर्तमान PATHचर के मान को इन-प्लेस में विस्तारित करने के लिए कहते हैं । अंतर यह है कि आप उनका उपयोग कैसे और कहां करते हैं। उदाहरण के लिए:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
दूसरे echoकमांड में, शेल कुछ भी प्रिंट नहीं करता है क्योंकि यह शेल को एक चर नामक प्रिंट को प्रिंट करने के लिए कहता है FOOx, जो मौजूद नहीं है; शेल रिक्त के रूप में कोई भी भिन्न चर नहीं मानता है। क्योंकि तीसरा echoघुंघराले ब्रेस सिंटैक्स का उपयोग करता है, यह शेल को यह देखने की अनुमति देता है कि आप FOOचर का अनुरोध कर रहे हैं , और xयह सिर्फ एक और चरित्र है जिसे आप तुरंत प्रिंट करना चाहते हैं।
घुंघराले ब्रेसिज़ के बिना एक ही प्रभाव प्राप्त करने का एक और तरीका है, वैसे:
$ echo "$FOO"x
barx
पर्यावरण चर डबल-कोट्स में विस्तारित होते हैं, और उद्धरण xचर विस्तार से अलग होते हैं इसलिए शेल सही काम करता है।
मैं FOOयहाँ पर्यावरण चर का उपयोग केवल स्पष्टता के लिए कर रहा हूँ । मैंने जो कुछ भी ऊपर लिखा PATHहै वह सिर्फ और सिर्फ उस पर लागू होता है , क्योंकि यह सिर्फ एक और पर्यावरण चर है। उदाहरण ग्रंथ अभी बहुत लंबा होगा।
निर्यात PATH का क्या अर्थ है? हम कब निर्यात करते हैं?
उपरोक्त FOOउदाहरण लेते हुए , यदि आप किसी अन्य प्रोग्राम को चलाने के लिए थे, तो यह FOOचर नहीं देखेगा क्योंकि यह निर्यात नहीं किया गया है। यह केवल उसी शेल उदाहरण के भीतर रहता है:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
जब मैं पहली बार एक नए bashशेल को चलाता हूं, तो मैं पहले से ही उपयोग कर रहा था, तब के मूल्य को दिखाने का प्रयास करें FOO, मुझे एक रिक्त मिलता है क्योंकि FOOदेखने के लिए उप-कार्यक्रमों के लिए निर्यात नहीं किया गया था। फिर मैंने दूसरा bashउदाहरण बाहर निकाला , इसे निर्यात किया, bashफिर से भाग गया, और अब दूसरा उदाहरण इसका मूल्य देखता है FOO।
आप का उपयोग exportजब आप चाहते हैं उप कार्यक्रमों खोल में सेट मान देखने के लिए, और उसका उपयोग नहीं करते जब आप ऐसा करने के लिए नहीं करना चाहती।
आमतौर पर, मैं शेल स्क्रिप्ट में अस्थायी चर निर्यात नहीं करता हूं, क्योंकि मैं नहीं चाहता कि वे उस शेल स्क्रिप्ट से चलने वाले प्रोग्राम को कैसे बदलें।
मैं आपके किसी भी अन्य प्रश्न का उत्तर देने वाला नहीं हूं। आप केवल एक समय में एक प्रश्न पूछने वाले हैं। मैंने केवल इसका उत्तर दिया है क्योंकि वे संबंधित हैं। बाकी सब कुछ एक अलग प्रश्न में है।