ZSH में पाथ चर के लिए एक नई प्रविष्टि जोड़ना


189

मैं zsh का उपयोग कर रहा हूं और मैं चर में एक नई प्रविष्टि ( /home/david/pear/bin) जोड़ने की कोशिश कर रहा हूं PATHलेकिन मुझे नहीं पता कि कैसे।

जो चीज मुझे सबसे ज्यादा भ्रमित करती है, वह यह है कि PATHमेरी ~/.zshrcफाइल में एक वेरिएबल के लिए एक भी संदर्भ नहीं है , लेकिन echo $PATHरिटर्न कर रहा है:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

तो PATHकहीं एक चर निर्धारित किया जा रहा है।

जवाबों:


214

यहां, इस पंक्ति को इसमें जोड़ें .zshrc:

export PATH=/home/david/pear/bin:$PATH

संपादित करें : यह काम करता है, लेकिन नीचे का जवाब बेहतर है, क्योंकि यह संरचित इंटरफ़ेस का लाभ लेता है ZSH जैसे चरों के लिए प्रदान करता है $PATH। यह दृष्टिकोण मानक है bash, लेकिन जहां तक ​​मुझे पता है, इसका उपयोग करने का कोई कारण नहीं है जब ZSH बेहतर विकल्प प्रदान करता है।


29
हाहा इसे भूल जाओ, मैं हालांकि यह केवल एक कंसोल कमांड था लेकिन उस लाइन को .zshrc में जोड़कर चाल चली। आपका बहुत बहुत धन्यवाद!
डेविड बैरेटो

1
मेरे .zshrc के पास पहले से ही PATH के निर्यात के लिए एक पंक्ति थी इसलिए मैंने इसे एक संशोधित के साथ बदल दिया।
ज़ैक हस्टन

6
मैं दूर करने के लिए प्रविष्टियों को दोहरे उद्धरण चिह्नों यानी था PATH="/home/david/pear/bin:/usr/bin:etc"करने के लिए PATH=/home/david/pear/bin:/usr/bin:etcयह zshrc में रहने के लिए के लिए।
a7omiton

3
@ टैको, आप $ Home
mencargo

1
@ डैनियलस्पिंगर: हाँ। जब आप एक खोल खोलते हैं PATH, तो यह उस मूल प्रक्रिया से विरासत में मिलता है, जिसने इसे शुरू किया था, और फिर जब यह चलता है .zshrc(या .bashrcया जो भी), तो यह आपको उस रास्ते पर अतिरिक्त चीजें जोड़ने की अनुमति देता है।
0

224

दरअसल, ZSH के उपयोग से आप पर्यावरण चर की विशेष मैपिंग का उपयोग कर सकते हैं। तो आप बस कर सकते हैं:

# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH

मेरे लिए यह एक बहुत ही साफ सुथरी विशेषता है जिसे अन्य चर के लिए प्रचारित किया जा सकता है। उदाहरण:

typeset -T LD_LIBRARY_PATH ld_library_path :

16
अच्छा उत्तर। मेरे मामले में, के ~/.zshrcबाद sourced है .profile, और में सब कुछ अधिलेखित कर दिया .profile। इसे निकालने के लिए मेरे बालों को खींचते हुए कुछ देर लगा।
खान गुयेन

1
जब तक आप एक से अधिक तत्वों को जोड़ नहीं रहे हैं, तब तक अपेंडेंस मामले में परिजनों की जरूरत नहीं है। यह भी अक्सर उद्धरण की जरूरत नहीं है। तो सरल, छोटा रास्ता है
मीका इलियट

1
@SuperUberDuper, आपको यह समझना चाहिए कि लगभग कोई भी यूनिक्स शेल स्टार्टअप फ़ाइलों को बस पढ़ता है जो लगभग वैसा ही करता है जैसे कि आप इसे अंतःक्रियात्मक रूप से शेल में टाइप करेंगे। "आरसी" फाइलों के बारे में आपको इस सवाल का
ony

6
स्पष्ट निर्यात से बचना -xऔर चर में केवल अनन्य मान छोड़ना संभव है -U, बृहदान्त्र डिफ़ॉल्ट रूप से ग्रहण किया जाता है, इसलिए यह हो सकता है:typeset -TUx PATH path
दुख

2
@ डैनियलस्प्रिंगर, नहीं। यदि आप इसे उन शब्दों में चाहते हैं: path=(...)(संदर्भित किए बिना $pathया $PATHअंदर) असाइन करता है, प्रस्तुत करता है path=(... $path)और path+(...)जोड़ता है।
ony

40

आप अपने लिए संलग्न कर सकते हैं PATH कम से कम फैशन में । जब तक आप एक से अधिक तत्व नहीं जोड़ते, तब तक आपको कोष्ठक की कोई आवश्यकता नहीं है। यह भी आमतौर पर उद्धरण की जरूरत नहीं है। तो सरल, छोटा रास्ता है:

path+=/some/new/bin/dir

सामान्य उपयोग

फिर एक नई स्क्रिप्ट / निष्पादन योग्य के परीक्षण के लिए सामान्य पैटर्न बन जाता है:

path+=$PWD/.
# or
path+=$PWD/bin

यह लोअर-केस सिंटैक्स pathएक सरणी के रूप में उपयोग कर रहा है , फिर भी इसके ऊपरी-केस पार्टनर समकक्ष को प्रभावित करता है,PATH (जिसके माध्यम से यह "बाध्य" है typeset)।

(ध्यान दें कि नहीं: विभाजक के रूप में ज़रूरत है / चाहते हैं ।)

संबंधित tidbits

इलाज pathइस तरह से (एक सरणी के रूप में) भी मतलब है: एक करने की कोई आवश्यकता rehash नव pathed आदेशों पाने के लिए पाया जा सकता है।

इसके अलावा पर एक नज़र डालें vared pathसंपादित करने के लिए एक गतिशील तरीके के रूप मेंpath और अन्य चीजें।

आप केवल pathइस प्रश्न के लिए दिलचस्पी ले सकते हैं , लेकिन जब से हम निर्यात और सरणियों के बारे में बात कर रहे हैं, ध्यान दें कि आम तौर पर निर्यात नहीं किया जा सकता है।

तुम भी कर सकते हैं रोकने के PATHडुप्लिकेट प्रविष्टियों पर लेने से (का उल्लेख इस और इस ):

typeset -U path

क्या यह 'पथ + =: / foo / बार' नहीं होना चाहिए? (एक बृहदान्त्र के साथ)
andrew lorien

1
@andrewlorien I ने बृहदान्त्र विभाजक के बारे में विवरण के साथ उत्तर को अद्यतन किया।
मीका इलियट

ध्यान दें कि यदि मार्ग के बाद कोई टिप्पणी है, तो हमें उद्धरण की आवश्यकता है, जैसे path+='my/path' # for fun। यदि आपके पास स्थान है तो यह स्पष्ट है, लेकिन यदि आपके पास कोई टिप्पणी नहीं है।
फ्रैंकलिन यू

"(ध्यान दें कि कोई: विभाजक के रूप में आवश्यक नहीं है / चाहता है।)" यह केवल लोअरकेस के लिए सही है path। .Zshrc:PATHPATH+=:/Users/path/to/my/folder
Emmett R.

37

एक लाइनर, ~/.zshrcफ़ाइल खोलने के बिना

echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc

या

echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc

प्रभाव देखने के लिए, source ~/.zshrcएक ही टैब में करें या एक नया टैब खोलें


1
ZX खोल के साथ OSX पर पूरी तरह से काम किया।
स्ट्राइकर

1
एक जादू की तरह काम किया!
अकबर शा अब्राहिम

14
  1. ~ / .Zshrc में पथ जोड़ा गया

    sudo vi ~/.zshrc

    नया रास्ता जोड़ें

    export PATH="$PATH:[NEW_DIRECTORY]/bin"
  2. अपडेट ~ / .zshrc

    सहेजें ~ / .zshrc

    source ~/.zshrc

  3. PATH की जाँच करें

    echo $PATH


2
यह Bashतरीका है।
चचेरे भाई

13

विकल्प 1: इस लाइन को ~ / .zshrc में जोड़ें:

export "PATH=$HOME/pear/bin:$PATH"

उसके बाद आपको source ~/.zshrcइस विंडो को प्रभावित करने या बंद करने और एक नया खोलने के लिए अपने परिवर्तनों को चलाने की आवश्यकता है

विकल्प 2: इस टर्मिनल को चालू टर्मिनल विंडो सत्र में जोड़ने के लिए इसे टर्मिनल कंसोल के अंदर निष्पादित करें। जब आप विंडो / सत्र बंद करते हैं, तो यह खो जाएगा।


क्या आप इस बारे में विस्तार से बता सकते हैं कि 5 साल पहले पोस्ट किए गए एक ही उत्तर से यह उत्तर अलग कैसे है ?
फ्रैंकलिन यू

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