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
जब आप चाहते हैं उप कार्यक्रमों खोल में सेट मान देखने के लिए, और उसका उपयोग नहीं करते जब आप ऐसा करने के लिए नहीं करना चाहती।
आमतौर पर, मैं शेल स्क्रिप्ट में अस्थायी चर निर्यात नहीं करता हूं, क्योंकि मैं नहीं चाहता कि वे उस शेल स्क्रिप्ट से चलने वाले प्रोग्राम को कैसे बदलें।
मैं आपके किसी भी अन्य प्रश्न का उत्तर देने वाला नहीं हूं। आप केवल एक समय में एक प्रश्न पूछने वाले हैं। मैंने केवल इसका उत्तर दिया है क्योंकि वे संबंधित हैं। बाकी सब कुछ एक अलग प्रश्न में है।