एक मैक ओएस पर पेट क्या है?


12

PATHएक मैक ओएस में क्या है ? मैंने इसका उपयोग वैश्विक कमांड-लाइन टूल को स्थापित करने के लिए किया है, लेकिन मैंने जो एकमात्र दस्तावेज़ पाया है, वह सिर्फ ऐसा करने के लिए ट्यूटोरियल हैं , जो हुड के नीचे क्या हो रहा है, इसका कोई वास्तविक विवरण नहीं है। मुझे विकिपीडिया पर एक प्रासंगिक पृष्ठ भी नहीं मिला है ।

तो इसका उद्देश्य PATHक्या है /etc/pathsऔर ~/.bash_profile** में क्या अंतर है ?

उदाहरण के लिए, मेरी pathsफ़ाइल में, मुझे यह दिखाई देता है:

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

लेकिन मेरे में ~/.bash_profile, मैं यह देखता हूं:

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

क्या यह केवल pathsफ़ाइल के लिए एक उपयोगकर्ता-विशिष्ट जोड़ है ? वह सब सामान क्या है paths, जैसे /usr/bin?


2
कृपया एक ही पोस्ट में कई प्रश्नों को संयोजित न करें। आपके प्रत्येक प्रश्न का यहाँ अलग से स्वागत किया जाएगा लेकिन सभी एक साथ इस तरह नहीं। कृपया इसे एक प्रश्न के नीचे ट्रिम करें, आप 1 और 2 को जोड़ सकते हैं, लेकिन दूसरों को विशेष रूप से पीएटीएच से कोई लेना देना नहीं है। 3 का उत्तर दिया गया है यहाँ 4 को समझाया गया है और 5 का इससे कोई मतलब नहीं है कि मुझे डर है। और न ही आपके बोनस का सवाल है, क्या फाइलें बाइनरी हैं? अनुलेख नहीं हैं।
terdon

मैंने अपने प्रश्न को नीचे संपादित किया है। इसके अलावा, मैंने उन लिंक को मददगार पाया। धन्यवाद।
gwg

जवाबों:


15

1. PATH का उद्देश्य क्या है?

PATHएक पर्यावरण चर है जिसमें निर्देशिकाओं की एक बृहदान्त्र-अलग-अलग सूची होती है, जहाँ आपका शेल उन निष्पादन योग्य चीज़ों की तलाश करेगा, जिन्हें आप कमांड लाइन पर नाम देते हैं, उन्हें एक स्पष्ट मार्ग प्रदान किए बिना (आपके jsdocउदाहरण के अनुसार)। इस प्रकार, यदि आपके PATHपास है

/usr/bin:/bin:/home/bin

फिर किसी भी निष्पादन योग्य जिसे आप नाम से पुकारते हैं, इन निर्देशिकाओं में खोजा जाएगा (उस क्रम में) और पहला निष्पादन योग्य जिसे निष्पादित किया गया है।

2. / etc / पाथ और ~ / .bash_profile में क्या अंतर है

के अनुसार ServerFault पर इस सवाल का , /etc/pathsस्थापित करने के लिए प्रयोग किया जाता है PATH(सभी उपयोगकर्ताओं के लिए यानी पूरे सिस्टम में) विश्व स्तर पर है, जबकि ~/.bash_profileसेट प्रति-उपयोगकर्ता वरीयताओं के लिए प्रयोग किया जाता है (जहां ~उपयोगकर्ता के घर निर्देशिका हो जाएगा)। इसमें जो लिखा है .bash_profileवह या तो वैश्विक PATHसे जोड़ सकता है या /etc/pathsइसे पूरी तरह से ओवरराइड कर सकता है।

रिकॉर्ड के लिए, /etc/pathsमैक OS की ख़ासियत है: मुझे यह कम से कम जीएनयू / लिनक्स पर नहीं आया है।


मैंने उन्हें नीचे संपादित किया, लेकिन उन सभी का उत्तर देने के लिए धन्यवाद!
gwg

@ggundersen मैंने आपके संपादित प्रश्न को फिट करने के लिए मेरे उत्तर को काट दिया।
जोसेफ आर।

@ggundersen आप OSX पर मेरे उत्तर और उसके लिंक को भी पढ़ना चाह सकते हैं /etc/paths
terdon

7

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जब आप चाहते हैं उप कार्यक्रमों खोल में सेट मान देखने के लिए, और उसका उपयोग नहीं करते जब आप ऐसा करने के लिए नहीं करना चाहती।

आमतौर पर, मैं शेल स्क्रिप्ट में अस्थायी चर निर्यात नहीं करता हूं, क्योंकि मैं नहीं चाहता कि वे उस शेल स्क्रिप्ट से चलने वाले प्रोग्राम को कैसे बदलें।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.