निर्यात लाइन सीधे Yosemite में कमांड लाइन से - मेरा पेट कहाँ है?


3

मैं git के नवीनतम संस्करण का उपयोग करना चाहता हूं, जिसे मैंने Homebrew के माध्यम से स्थापित किया है, इसलिए मुझे अपने को बदलने की आवश्यकता है PATH ओएस एक्स को सुनिश्चित करने के लिए वेरिएबल होमब्रेव संस्करण का उपयोग करता है जो पुराने संस्करण के बजाय ओएस एक्स और कमांड लाइन टूल्स के साथ जहाज का उपयोग करता है। यह ट्यूटोरियल बस चलाने की सलाह देते हैं:

$ export PATH=/usr/local/bin:$PATH

यही मैंने किया और इसने बहुत काम किया।

मेरा प्रश्न है: इस आदेश ने मुझे कहाँ संशोधित किया PATH चर? मेरे पास नहीं है ~/.bashrc, ~/.bash_profile, या ~/.profile मेरे घर निर्देशिका में फ़ाइलें, लेकिन जब मैं $ echo $PATH फिर PATH सही प्रतीत होता है और जब चल रहा है which git तथा git --version सब कुछ सही जगह इंगित करता है। मुझे सूचीबद्ध सही रास्ते दिखाई देते हैं /etc/paths लेकिन अगर मैं परीक्षण पथ का उपयोग करता हूं export कमांड लाइन से तो परीक्षण पथ उस फ़ाइल में दिखाई नहीं देता है।

एक और सवाल: क्या यह मेरे संशोधित करने का एक अच्छा तरीका है PATH चर?

अंतिम प्रश्न: इस विधि के फायदे और नुकसान क्या हैं?

संपादित करें: मुझे सूचीबद्ध सही रास्ते दिखाई देते हैं /etc/paths लेकिन अगर मैं परीक्षण पथ का उपयोग करता हूं $ export PATH=/test:$PATH तब परीक्षण पथ दिखाई नहीं देता है /etc/paths/, लेकिन यह पहली बार दिखाई देता है जब मैं दौड़ता हूं $ echo $PATH, हालांकि यह रिबूट करने के बाद खो जाता है।


यह कई का डुप्लिकेट है (और आपके यहां कई सवाल हैं) - हालाँकि / usr / लोकल / बिन आपके डिफ़ॉल्ट पथ पर / etc / पथों में सेट है
Mark

1
@ मेरा मानना ​​है कि मेरा मुख्य प्रश्न इस विषय पर देखे गए अन्य प्रश्नों की तुलना में अधिक विशिष्ट है। मैंने अभी तक एक प्रश्न नहीं देखा है जहां इसका उत्तर दिया गया है। इसलिए मुझे यह बताना कि यह एक डुप्लिकेट है, यह अनिवार्य रूप से कह रहा है "किसी ने आपके प्रश्न का उत्तर दिया", लेकिन उत्तर देना जहां प्रश्न और उत्तरों के विशाल निकाय के भीतर हो सकता है। अगर आप मुझे सही दिशा में इंगित करने की परवाह करते हैं तो यह सबसे ज्यादा मददगार होगा। अगर यह वास्तव में कहीं और उत्तर दिया जाता है तो मैं खुशी से अपने सवाल को हटा दूंगा। धन्यवाद।
cfx

क्षमा करें, मैंने उत्तर के रूप में टिप्पणी के दूसरे हिस्से को छोड़ दिया जब तक कि मैं एक अच्छा डुप्लिकेट नहीं मिला और एक पाया लेकिन यह देखना भूल गया apple.stackexchange.com/a/121021/237 - और देखें कि उत्तर / etc / पथ में क्या सूचीबद्ध है। कृपया उस उत्तर पर क्या व्याख्या की गई है, इस पर टिप्पणी करें क्योंकि हमें एक कैनोनिकल उत्तर प्राप्त करने की आवश्यकता है - इसलिए अगले व्यक्ति को सभी खोज करने की आवश्यकता नहीं है
Mark

जोड़ने के लिए / आदि / पथ काम नहीं कर रहे हैं - कि मुझे लगता है कि यह एक अलग सवाल होना चाहिए क्योंकि यह काम करता है इसलिए हमें यह जानने की आवश्यकता है कि आपने क्या किया (यदि यो ने एक रिबूट किया है जिसकी आवश्यकता है)
Mark

@ मार्क स्पष्ट करने के लिए धन्यवाद। मैं उस स्टैक से सलाह लूंगा और कुछ और परीक्षण करूंगा और इस स्टैक को अपडेट करूंगा जो मैं बताता हूं।
cfx

जवाबों:


3

3 जून को आपने निम्नलिखित टिप्पणी पोस्ट की

@DavidAnderson तो अगर मैं सही ढंग से समझूं, तो निर्यात PATH चल रहा है ... एक इंटरैक्टिव शेल सत्र से केवल उस सत्र के लिए $ PATH को प्रभावित करता है और नए जोड़े गए पथ को कहीं भी सहेजा नहीं जाता है (और इसलिए कोई फ़ाइल नहीं है जहां नए जोड़े गए पथ को संपादित किया जा सकता है )। उदाहरण के लिए, यदि मैं PATH = / test: $ PATH का निर्यात करता हूं, लेकिन मेरा मतलब इसके बजाय / test_123 dir को निर्यात करना है, तो मेरा सबसे अच्छा विकल्प यह है कि हम गलत या परीक्षण dir युक्त फ़ाइल को खोजने और संपादित करने के बजाय एक नया सत्र शुरू करें। (क्योंकि ऐसी कोई फ़ाइल नहीं है)। सही बात?

आपकी टिप्पणी पर मेरी प्रतिक्रिया

बैश के लिए मैनुअल पेज से, मैंने निम्नलिखित निकाला है।

A parameter is an entity that stores values.  It can be a name, a
number, or one of the special characters listed below under Special
Parameters.  A variable is a parameter denoted by a name.  A variable 
has a value and zero or more attributes.

PATH एक चर का नाम है। आम तौर पर, इस चर में केवल निर्यात विशेषता चालू होती है। निर्यात विशेषता पर्यावरण के माध्यम से बाद के आदेशों के लिए निर्यात के लिए एक चर चिह्नित करती है। export आदेश निर्यात विशेषता को चालू करता है, लेकिन के मामले में PATH चर, निर्यात विशेषता पहले से चालू है। इसलिए, के लिए PATH परिवर्तनशील, अगले चार कमांड समतुल्य हैं।

PATH=/test:$PATH
export PATH=/test:$PATH
declare PATH=/test:$PATH
typeset PATH=/test:$PATH

आपकी टिप्पणी के लिए, आप सही हैं। ऐसी कोई फाइल नहीं है।

आपके द्वारा उल्लिखित प्रकार की गलती के मामले में, मुझे नहीं लगता कि एक नया सत्र शुरू करना सबसे अच्छा विकल्प होगा। मैं कमांड दर्ज करूंगा

declare -p PATH

और फिर आउटपुट को हाइलाइट करें। फिर आप अपने अगले कमांड के रूप में टेक्स्ट को काट और पेस्ट कर सकते हैं। रिटर्न कुंजी मारने से पहले, अपनी गलती को सुधारने के लिए अन्य कुंजियों का उपयोग करें।

इस विषय पर अधिक जानकारी के लिए, bash के लिए मैनुअल पेज देखें। या तो कमांड दर्ज करें

man bash

या साइट पर जाएँ: बैश - जीएनयू बॉर्न-अगेन शेल

आपके संपादन के जवाब में:

हां, जब आप रिबूट करते हैं तो आपको अपने पैथ वेरिएबल में हारने / परीक्षण करने का अनुमान है। यही कारण है कि आपको एक लगाने की आवश्यकता है export अपने में कमान ~./profile फ़ाइल।

मूल उत्तर:

तुम उलझन में लग रहे हो जब ~/.bashrc, ~/.bash_profile, तथा ~/.profile फ़ाइलें निष्पादित करें। शायद इससे मदद मिलेगी।

यहां बताया गया है कि मैंने अपना कंप्यूटर कैसे सेट किया है। मेरे पास तीन फाइलें हैं: ~/.profile, ~/.bashrc तथा ~/.bashcm। यदि आप इनमें से किसी को याद कर रहे हैं, तो आप उन्हें बना सकते हैं।

जब मैं टर्मिनल एप्लिकेशन शुरू करता हूं या मेनू बार पर "शेल" से "नई विंडो" का चयन करता हूं, तो एक इंटरेक्टिव बैश लॉगिन शेल का उपयोग किया जाता है। यह खोल निष्पादित करता है ~/.profile स्टार्टअप पर स्क्रिप्ट। आप स्थानापन्न कर सकते हैं ~/.bash_profile या ~/.bash_login के लिये ~./profile यदि आप चाहते हैं। यदि एक इंटरएक्टिव बैश शेल जो कि लॉगिन शेल नहीं है, तो शेल पढ़ा जाता है और कमांड को निष्पादित करता है ~/.bashrc। का उद्देश्य है ~/.bashcm दोनों द्वारा निष्पादित की जाने वाली एक सामान्य स्क्रिप्ट प्रदान करना है ~/.profile तथा ~/.bashrc

यहाँ एक उदाहरण है .profile फ़ाइल

echo in .profile
source ~/.bashcm
export PATH=$PATH:~/bin
echo exit .profile

गूंज आदेशों का उद्देश्य स्क्रिप्ट निष्पादित होने पर वर्णन करना है। एक बार जब आप सहज हो जाते हैं, तो आप या तो टिप्पणी कर सकते हैं या उन्हें हटा सकते हैं। .profile फ़ाइल निष्पादित होती है .bashcm स्क्रिप्ट, फिर पथ परिवर्तन को संशोधित करता है और बाहर निकलता है। एक उदाहरण .bashcm फ़ाइल नीचे दिखाई गई है

echo in bashcm
PS1='\h:\W \u\$ '
alias home='cd ~'
echo exit .bashcm

इको कमांड के अलावा, .bashcm केवल संकेत और एक उपनाम सेट करता है। उदाहरण .bashrc नीचे दिखाई गई फ़ाइल बस निष्पादित होती है .bashcm स्क्रिप्ट। फिर से प्रतिध्वनि आदेश केवल दृष्टांत उद्देश्यों के लिए हैं।

echo in .bashrc
source ~/.bashcm
echo exit .bashrc

अगर मैं टर्मिनल एप्लिकेशन शुरू करता हूं और कमांड दर्ज करता हूं

echo $PATH
alias
bash
echo $PATH
alias

in the window, I get the following.

Last login: Wed May 27 14:48:19 on ttys000
in .profile
in bashcm
exit .bashcm
exit .profile
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$ bash
in .bashrc
in bashcm
exit .bashcm
exit .bashrc
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$ 

export वास्तव में यह सुनिश्चित करता है PATH शेल के भीतर से चलने वाली प्रक्रियाओं में दिखाई देता है। के बिना export, चर केवल वर्तमान (शेल) प्रक्रिया में दिखाई देते हैं, किसी भी बच्चे की प्रक्रियाओं में नहीं।
nohillside

1
@DavidAnderson तो अगर मैं सही ढंग से समझता हूं, तो चल रहा है export PATH... एक इंटरैक्टिव शेल सत्र से केवल प्रभावित करता है $PATH उस सत्र के लिए और नए जोड़े गए पथ को कहीं भी सहेजा नहीं गया है (और इसलिए ऐसी कोई फ़ाइल नहीं है जहाँ नए जोड़े गए पथ को संपादित किया जा सके)। जैसे, अगर मैं दौड़ता हूँ export PATH=/test:$PATH लेकिन मेरा मतलब निर्यात करना था /testing_123 इसके बजाय dir, तो मेरा सबसे अच्छा विकल्प बस एक नए सत्र को शुरू करने के बजाय एक फ़ाइल को खोजने और संपादित करने का प्रयास है /test dir (क्योंकि ऐसी कोई फ़ाइल नहीं है)। सही बात?
cfx

@ पानी की गति: आगे के शोध पर, इसका उपयोग पता चला है export के लिए वैकल्पिक है PATH चर। उदाहरण के लिए, PATH=$PATH:~/bin के बराबर होगा export PATH=$PATH:~/bin। दो आदेशों को अलग तरह से करने के लिए, आपको सबसे पहले प्रवेश करना होगा declare +x PATH आदेश। यह निर्यात विशेषता को बंद कर देगा।
David Anderson

1
@ cfx: मैंने आपकी नवीनतम टिप्पणी के जवाब में अपना उत्तर अपडेट किया।
David Anderson

यह काफी है export पैठ के लिए एक चर, यह पहले से ही जगह लेता है /etc/profile जब का उत्पादन /usr/libexec/path_helper -s मूल्यांकन किया है।
nohillside
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.