Unix किस कमांड द्वारा खोजे जाने के लिए होम डाइरेक्टरी पथ को कैसे जोड़े?


12

मैंने node.jsकस्टम स्थान पर स्थापित किया है और फ़ाइल $PATHमें स्थान जोड़ा है .profile

$ node --version
v0.6.2
$ which node
$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:~/Unix/homebrew/bin
$ cat ~/.profile
export  PATH="$PATH:~/Unix/homebrew/bin"

Node.js ही अच्छी तरह से चलता है। समस्या यह है कि यह whichकमांड द्वारा सूचीबद्ध नहीं है । इसलिए मैं npmअब स्थापित नहीं कर सकता । क्योंकि npmस्थापित करने का स्थान नहीं मिल रहा है node.js। मैं nodeबाइनरी की खोज कैसे कर सकता हूं which?

जवाबों:


11

ऐसा इसलिए हो रहा है क्योंकि ~इसका विस्तार नहीं किया गया है। आपका शेल जानता है कि इससे कैसे निपटना है, लेकिन which(और न ही अधिकांश अन्य कार्यक्रम)। इसके बजाय, करें:

export "PATH+=:$HOME/Unix/homebrew/bin"

वैकल्पिक रूप से, का उपयोग करना बंद करो which, और (लगभग हमेशा बेहतर) का उपयोग करें type -p

यहाँ इस मुद्दे का एक प्रदर्शन है:

$ echo "$PATH"
/usr/local/bin:/usr/bin:/bin
$ export "PATH+=:~/git/yturl"
$ yturl
Usage: yturl id [itag ...]
$ which yturl
$ type -p yturl
/home/chris/git/yturl/yturl
$ export "PATH=/usr/local/bin:/usr/bin:/bin:$HOME/git/yturl"
$ which yturl
/home/chris/git/yturl/yturl

ध्यान रखें कि कुछ अन्य कार्यक्रम जो देखते हैं, $PATHवे ~दोनों का अर्थ समझ नहीं सकते हैं, और इसे एक रिश्तेदार पथ के हिस्से के रूप में ले सकते हैं। यह उपयोग करने के लिए अधिक पोर्टेबल है $HOME


1
जबकि प्रस्तावित समाधान काम करता है, स्पष्टीकरण गलत है। whichयहाँ गलती नहीं है; की ~परिभाषा में विस्तार किया जाना चाहिए था PATH। बैश में एक विषमता है कि यह ~वैसे भी फैलता है PATH, इसलिए दो गलतियां एक सही, तरह का बनाती हैं।
गाइल्स का SO- बुराई पर रोक '21

@ गिल्स मैंने जो कहा उससे अलग कैसे है?
क्रिस डाउन

तथ्य यह है कि यह सब उद्धृत के साथ काम करता ~है एक बैश विषमता है। उस शाब्दिक ~में $PATHहोने से लाइन के नीचे परेशानी होने की संभावना है क्योंकि ऐसे प्रोग्राम हैं जो अपना विभाजन करते हैं $PATHऔर वे ~विशेष रूप से इलाज नहीं करते हैं ।
गाइल्स का SO- बुराई पर रोक '

@ गिल्स ... और जो मेरे अंतिम पैराग्राफ में कहा गया है, उससे कैसे अलग है?
क्रिस डाउन

1
हालांकि यह तकनीकी रूप से सच है कि "कुछ अन्य कार्यक्रम ... का अर्थ नहीं समझ सकते हैं ~", आपका वाक्य भ्रामक है। के संदर्भ में $PATH, यह मार के अलावा हर कार्यक्रम है।
गिल्स एसओ- बुराई को रोकना '

18

आपके लिए वह लाइन .profileएक होनी चाहिए

export  PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH=$PATH:$HOME/Unix/homebrew/bin
PATH=$PATH:~/Unix/homebrew/bin

~जब यह किसी शब्द का पहला वर्ण होता है और यह निर्विवाद होता है , तो चरित्र केवल आपके घर निर्देशिका में विस्तारित होता है। आपने जो लिखा है, वह ~दोहरे उद्धरण चिह्नों के बीच है और इसलिए इसका विस्तार नहीं है। यहां तक ​​कि अगर आपने लिखा है export "PATH=$PATH:"~/Unix/homebrew/bin, तो ~इसका विस्तार नहीं किया जाएगा क्योंकि यह एक शेल शब्द की शुरुआत में नहीं है।

एक विशेष वितरण है, जिसका उद्देश्य PATHसमान चर के लिए मान लिखना है । तो ~बस बराबर संकेत है कि निशान एक काम है, या यदि के बाद है ~सिर्फ एक के बाद है :एक काम के दाएँ हाथ की ओर में है, तो यह विस्तार किया है। केवल सादे असाइनमेंट में यह डिस्पेंस होता है, export PATH=…गिनती नहीं करता है (यह exportबिलिन के लिए एक कॉल है , जिसमें ऐसा तर्क होता है जिसमें एक =वर्ण होता है )।

यहां, आपको निर्यात करने की आवश्यकता नहीं है PATHक्योंकि यह पहले से ही निर्यात किया गया है। exportजब आपको किसी वैरिएबल (पुराने बॉर्न शेल को छोड़कर जो आपको OSX या Linux पर नहीं मिलेगा) को बदलकर कॉल करने की आवश्यकता नहीं है । इसके अलावा, एक असाइनमेंट (फिर से, exportगिनती नहीं करता है) में, आपको दाहिने हाथ के चारों ओर दोहरे उद्धरण चिह्नों की आवश्यकता नहीं है, इसलिए रिक्त स्थान होने पर PATH=$PATH:~/Unix/homebrew/binभी सुरक्षित है $PATH

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