पथ में सही तरीके से कैसे जोड़ें?


921

मैं सोच रहा हूं कि PATHपर्यावरण चर में एक नया मार्ग कहां जोड़ा जाना है । मुझे पता है कि इसे संपादित किया जा सकता है .bashrc(उदाहरण के लिए), लेकिन यह स्पष्ट नहीं है कि यह कैसे करना है।

इस तरफ:

export PATH=~/opt/bin:$PATH

या यह?

export PATH=$PATH:~/opt/bin

Printf '\ nPATH = $ PATH: "पाथ-टू-ऐड" \ nexport PATH \ n' >> >> ~ / .bashrc
सूडेर


यदि पहले से ही कुछ रास्ते जोड़े गए हैं, उदाहरण के लिए PATH=$PATH:$HOME/.local/bin:$HOME/bin, एक को अलग करके जोड़ा जा सकता है जैसे: उदा PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/ec2-user/pear/bin
संदीपन नाथ

2
क्या ये उत्तर लिनक्स के सभी स्वादों के लिए काम करते हैं?
अनेगेहुवर

जवाबों:


1033

साधारण सामान

PATH=$PATH:~/opt/bin

या

PATH=~/opt/bin:$PATH

इस आधार पर कि क्या आप ~/opt/binअंत में जोड़ना चाहते हैं (अन्य सभी निर्देशिकाओं के बाद खोजा जा सकता है, मामले में एक ही नाम से कई निर्देशिकाओं में) या शुरुआत में (सभी अन्य निर्देशिकाओं से पहले खोजा जा सकता है)।

आप एक ही समय में कई प्रविष्टियाँ जोड़ सकते हैं। PATH=$PATH:~/opt/bin:~/opt/node/binया आदेश देने के काम पर बदलाव ठीक है। exportलाइन की शुरुआत में मत डालो क्योंकि इसमें अतिरिक्त जटिलताएं हैं (नीचे देखें "बैश के अलावा गोले पर नोट्स")।

यदि आपका PATHनिर्माण कई अलग-अलग घटकों द्वारा किया जाता है, तो आप डुप्लिकेट प्रविष्टियों के साथ समाप्त हो सकते हैं। देखें कि यूनिक्स किस कमांड से खोजा जा रहा है? और डुप्लिकेट को जोड़ने या उन्हें हटाने से बचने के लिए awk कमांड के साथ डुप्लिकेट $ PATH प्रविष्टियों को निकालें।

कुछ वितरण अपने ~/binआप अपने पेट में डाल दिया अगर यह मौजूद है, वैसे।

इसे कहां लगाना है

PATHमें संशोधित करने के लिए लाइन रखो ~/.profile, या ~/.bash_profileयदि आपके पास क्या है।

ध्यान दें कि ~/.bash_rcकिसी भी प्रोग्राम द्वारा पढ़ा नहीं जाता है, और ~/.bashrcबैश के इंटरैक्टिव उदाहरणों की कॉन्फ़िगरेशन फ़ाइल है। आपको पर्यावरण चर को परिभाषित नहीं करना चाहिए ~/.bashrc। पर्यावरण चर को परिभाषित करने के लिए सही जगह PATHहै ~/.profile(या ~/.bash_profileयदि आप बैश के अलावा गोले की परवाह नहीं करते हैं)। देखें कि उनके बीच क्या अंतर है और मुझे किसका उपयोग करना चाहिए?

इसे अंदर /etc/environmentन रखें ~/.pam_environment: ये शेल फाइलें नहीं हैं, आप $PATHवहां की तरह प्रतिस्थापन का उपयोग नहीं कर सकते । इन फ़ाइलों में, आप केवल एक चर को ओवरराइड कर सकते हैं, इसे जोड़ नहीं सकते।

कुछ सिस्टम स्क्रिप्ट में संभावित जटिलताएं

exportयदि चर पहले से ही पर्यावरण में है, तो आपको इसकी आवश्यकता नहीं है: चर के मूल्य का कोई भी परिवर्तन पर्यावरण में परिलक्षित होता है। पर्यावरण PATHमें बहुत अधिक होता है; सभी यूनिक्स सिस्टम इसे बहुत जल्दी सेट करते हैं (आमतौर पर बहुत पहली प्रक्रिया में, वास्तव में)।

लॉगिन समय पर, आप PATHपहले से ही पर्यावरण में, और पहले से ही कुछ सिस्टम निर्देशिकाओं पर भरोसा कर सकते हैं । आप एक स्क्रिप्ट है कि जल्दी निष्पादित किया जा सकता आभासी वातावरण किसी तरह का सेट करते समय लिख रहे हैं, तो आप यह सुनिश्चित करें कि आवश्यकता हो सकती है PATHयदि: गैर खाली और निर्यात है PATHअभी भी सेट नहीं हो, तो कुछ इस तरह PATH=$PATH:/some/directoryतय करेगा PATHकरने के लिए :/some/directory, और खाली घटक शुरुआत में इसका मतलब है कि वर्तमान निर्देशिका (जैसे .:/some/directory)।

if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi

बैश के अलावा अन्य गोले पर नोट

बाश में, ksh और zsh, exportविशेष वाक्यविन्यास है, और दोनों PATH=~/opt/bin:$PATHऔर export PATH=~/opt/bin:$PATHसही काम भी करते हैं। अन्य बॉर्न / पोसिक्स-शैली के गोले में जैसे कि डैश (जो /bin/shकई प्रणालियों पर है), exportएक साधारण कमांड के रूप में पार्स किया जाता है, जो दो अंतरों को बताता है:

तो पानी के छींटे जैसे गोले में, पहली जगह तक के मूल्य के बाद शाब्दिक स्ट्रिंग पर export PATH=~/opt/bin:$PATHसेट PATHहोता है। (एक नंगे असाइनमेंट) को उद्धरण की आवश्यकता नहीं है और सही काम करता है। यदि आप एक पोर्टेबल स्क्रिप्ट में उपयोग करना चाहते हैं , तो आपको लिखने की ज़रूरत है , या ( बॉर्न शेल को पोर्टेबिलिटी के लिए भी स्वीकार नहीं करना चाहिए और टिल्ड विस्तार नहीं करना चाहिए)।~/opt/bin/:PATHPATH=~/opt/bin:$PATHexportexport PATH="$HOME/opt/bin:$PATH"PATH=~/opt/bin:$PATH; export PATHPATH=$HOME/opt/bin:$PATH; export PATHexport var=value

¹ यह बॉर्न गोले में वास्तविक नहीं था (जैसा कि वास्तविक बॉर्न शेल में, आधुनिक पॉसिक्स-शैली के गोले में नहीं), लेकिन आप इन दिनों ऐसे पुराने गोले का सामना करने की अत्यधिक संभावना नहीं है।


अभी भी निर्यात के साथ जटिलता को समझने में सक्षम नहीं है। क्या आप इसे सरल कर सकते हैं?
priojeet priyom

@priojeetpriyom सरल स्पष्टीकरण: आपको ज़रूरत नहीं है export
गाइल्स

इस जवाब के लिए धन्यवाद, पूरी तरह से विस्तृत। आप कहते हैं, " आपको पर्यावरण चर को ~ / .bashrc में परिभाषित नहीं करना चाहिए ", लेकिन दुर्भाग्य से 100% प्रोग्राम जो मैंने अपने सिस्टम पर स्थापित किए हैं जो पथ को संशोधित करते हैं (FZF और Rust's Cargo) में पथ को संशोधित करते हैं .bashrc। मुझे लगता है क्योंकि RZ में FZF लिखा है, यह भी Rust के पैटर्न का अनुसरण कर रहा है।
icc97

83

किसी भी तरह से काम करता है, लेकिन वे एक ही काम नहीं करते हैं: तत्वों की PATHजांच बाएं से दाएं की जाती है। आपके पहले उदाहरण में, निष्पादकों में ~/opt/binउन लोगों पर पूर्वता होगी, उदाहरण के लिए /usr/bin, जो आप चाहते हैं या नहीं हो सकता है।

विशेष रूप से, सुरक्षा के दृष्टिकोण से, सामने वाले रास्तों को जोड़ना खतरनाक है, क्योंकि यदि कोई आपके लिए पहुंच लिख सकता है ~/opt/bin, तो वे डाल सकते हैं, उदाहरण के लिए, lsवहां एक अलग , जिसे आप संभवतः उपयोग करेंगे। की /bin/lsदेख के बिना। अब आप sshया आपके ब्राउज़र या पसंद के लिए भी यही कल्पना करें ... (वही आपके रास्ते में आने के लिए पूरी तरह से तैयार हो जाता है।)


6
लेकिन अगर आप अपना खुद का, अनुकूलित संस्करण lsरखना चाहते हैं, तो आपको इसे एक निर्देशिका में रखना होगा /bin
बरमार

16
या अन्य उपनाम ls = myls
वाल्टिनेटर

36

मैं प्रश्न 2 (जब से यह असंबंधित मुद्दे के कारण प्रश्न से हटा दिया गया था) से भ्रमित हूं:

विभिन्न मार्गों पर अधिक पथ को जोड़ने के लिए एक व्यावहारिक तरीका क्या है? शुरू में मुझे लगा कि यह चाल चल सकती है:

export PATH=$PATH:~/opt/bin
export PATH=$PATH:~/opt/node/bin

लेकिन ऐसा नहीं है क्योंकि दूसरा असाइनमेंट न केवल अपेंडेंट है ~/opt/node/bin, बल्कि पूरे PATHपहले से असाइन किया गया है।

यह एक संभावित समाधान है:

export PATH=$PATH:~/opt/bin:~/opt/node/bin

लेकिन पठनीयता के लिए मैं एक पथ के लिए एक असाइनमेंट रखना पसंद करूंगा।

अगर आप कहते हैं

PATH=~/opt/bin

यह सब आपके पेट में होगा। PATH सिर्फ एक पर्यावरण चर है, और यदि आप PATH में जोड़ना चाहते हैं, तो आपको चर को ठीक उसी सामग्री के साथ फिर से बनाना होगा जो आप चाहते हैं। यही है, जो आप प्रश्न 2 के लिए एक उदाहरण के रूप में देते हैं, वही है जो आप करना चाहते हैं, जब तक कि मैं प्रश्न के बिंदु को पूरी तरह से याद नहीं कर रहा हूं।

मैं अपने कोड में दोनों रूपों का उपयोग करता हूं। मेरे पास एक सामान्य प्रोफ़ाइल है जिसे मैं प्रत्येक मशीन पर स्थापित करता हूं जो इस तरह से काम करता है, जो संभावित रूप से लापता निर्देशिकाओं के लिए समायोजित करने के लिए इस तरह दिखता है:

export PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11
# add optional items to the path
for bindir in $HOME/local/bin $HOME/bin; do
    if [ -d $bindir ]; then
        PATH=$PATH:${bindir}
    fi
done

2
आप प्रश्न 2 के उदाहरण के बारे में सही हैं, यह काम करता है। मेरे सिस्टम पर एक और PATH संबंधित मुद्दे ने मुझे भ्रमित कर दिया। उसके लिए खेद है।
पाओलो

26

बुलेट प्रूफ करने का तरीका / लागू करने का तरीका

बहुत सारे विचार शामिल हैं जो पसंद करने में शामिल हैं। उनमें से कई अन्य उत्तरों में शामिल हैं, इसलिए मैं उन्हें यहां नहीं दोहराऊंगा।

एक महत्वपूर्ण बिंदु यह है कि, भले ही सिस्टम स्क्रिप्ट इस का उपयोग न करें (मुझे आश्चर्य है कि क्यों * ) 1 , $HOME/binपैथ पर्यावरण चर के लिए एक पथ (जैसे, ) जोड़ने के लिए बुलेट-प्रूफ तरीका है

PATH="${PATH:+${PATH}:}$HOME/bin"

(के बजाय PATH="$PATH:$HOME/bin") और

PATH="$HOME/bin${PATH:+:${PATH}}"

प्रस्तुत करने के लिए (बजाय PATH="$HOME/bin:$PATH")

यह $PATHशुरू में खाली होने पर विशाल अग्रणी / अनुगामी बृहदान्त्र से बचा जाता है , जिसमें अवांछित दुष्प्रभाव हो सकते हैं और यह एक दुःस्वप्न बन सकता है, जिसे खोजने के लिए मायावी हो सकता है ( यह उत्तर केस- awkमार्ग के साथ संक्षेप में व्यवहार करता है )।

स्पष्टीकरण ( शेल पैरामीटर विस्तार से ):

${parameter:+word}

यदि parameterअशक्त या परेशान है, तो कुछ भी प्रतिस्थापित नहीं किया जाता है, अन्यथा विस्तार wordको प्रतिस्थापित किया जाता है।

इस प्रकार, ${PATH:+${PATH}:}का विस्तार किया जाता है: 1) कुछ भी नहीं, अगर PATHअशक्त या परेशान है, 2) ${PATH}:, यदि PATHसेट है।

नोट : यह बैश के लिए है।


* 1 मैंने अभी-अभी पाया है कि लिपियाँ devtoolset-6/enableवास्तव में इसका उपयोग करती हैं,

$ cat /opt/rh/devtoolset-6/enable
# General environment variables
export PATH=/opt/rh/devtoolset-6/root/usr/bin${PATH:+:${PATH}}
...

24

लिनक्स $PATHपर्यावरण चर के साथ निष्पादन योग्य खोज पथ को निर्धारित करता है । $PATHपर्यावरण चर की शुरुआत के लिए निर्देशिका / डेटा / मायस्क्रिप्ट जोड़ने के लिए, निम्नलिखित का उपयोग करें:

PATH=/data/myscripts:$PATH

पथ के अंत में उस निर्देशिका को जोड़ने के लिए, निम्न कमांड का उपयोग करें:

PATH=$PATH:/data/myscripts

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

  • यदि स्क्रिप्ट के भीतर, आप पर्यावरण चर का निर्यात करते हैं तो यह स्क्रिप्ट द्वारा बुलाए गए किसी भी कार्यक्रम के भीतर प्रभावी है। ध्यान दें कि यह उस प्रोग्राम के भीतर प्रभावी नहीं है जिसे स्क्रिप्ट कहा जाता है।
  • यदि प्रोग्राम जो स्क्रिप्ट को कॉल करता है, तो कॉल करने के बजाय शामिल करके करता है, तो स्क्रिप्ट में कोई भी पर्यावरण परिवर्तन कॉलिंग प्रोग्राम के भीतर प्रभावी होता है। इस तरह के समावेश को डॉट कमांड या सोर्स कमांड से किया जा सकता है।

उदाहरण:

$HOME/myscript.sh
source $HOME/myscript.sh

समावेशन मूल रूप से "कॉलिंग" स्क्रिप्ट में "कॉल" स्क्रिप्ट को शामिल करता है। यह सी में एक #include की तरह है इसलिए यह "कॉलिंग" स्क्रिप्ट या प्रोग्राम के अंदर प्रभावी है। लेकिन निश्चित रूप से, यह कॉलिंग प्रोग्राम द्वारा बुलाए गए किसी भी प्रोग्राम या स्क्रिप्ट में प्रभावी नहीं है। कॉल श्रृंखला के सभी तरह से इसे प्रभावी बनाने के लिए, आपको निर्यात आदेश के साथ पर्यावरण चर की सेटिंग का पालन करना चाहिए।

एक उदाहरण के रूप में, बैश शेल प्रोग्राम में समावेश द्वारा फ़ाइल .bash_profile की सामग्री शामिल है। निम्नलिखित 2 लाइनें .bash_profile में रखें:

PATH=$PATH:/data/myscripts
export PATH

प्रभावी रूप से बैश प्रोग्राम में कोड की उन 2 पंक्तियों को रखता है। तो बैश के भीतर, $ PATH वैरिएबल शामिल है $HOME/myscript.sh, और एक्सपोर्ट स्टेटमेंट के कारण, बैश द्वारा बुलाए गए किसी भी प्रोग्राम में परिवर्तित $PATHवैरिएबल है। और क्योंकि आप जो भी प्रोग्राम bash प्रॉम्प्ट से चलाते हैं, उसे bash द्वारा कॉल किया जाता है, जो भी नया तरीका आप bash प्रॉम्प्ट से चलाते हैं, उसके लिए लागू है।

लब्बोलुआब यह है कि पथ में एक नई निर्देशिका जोड़ने के लिए, आपको शेल में शामिल स्क्रिप्ट के भीतर $ PATH पर्यावरण चर में निर्देशिका को जोड़ना या प्रीपेन्ड करना होगा, और आपको $PATHपर्यावरण चर को निर्यात करना होगा ।

अधिक जानकारी यहाँ


19

कुछ समय के लिए अब मैंने अपने साथ दो कार्य रखे हैं pathaddऔर pathrmजो कि दोहराव के बारे में चिंता करने की आवश्यकता के बिना तत्वों को जोड़ने में सहायता करते हैं।

pathaddएक एकल पथ तर्क और एक वैकल्पिक afterतर्क लेता है, जो यदि आपूर्ति करता है, तो PATHअन्यथा इसे प्रस्तुत करेगा।

लगभग हर स्थिति में यदि आप रास्ते में शामिल हो रहे हैं, तो आप संभवतः पहले से ही रास्ते में कुछ भी ओवरराइड करना चाहते हैं, यही कारण है कि मैं डिफ़ॉल्ट रूप से प्रीपेन्ड करने का विकल्प चुनता हूं।

pathadd() {
    newelement=${1%/}
    if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; then
        if [ "$2" = "after" ] ; then
            PATH="$PATH:$newelement"
        else
            PATH="$newelement:$PATH"
        fi
    fi
}

pathrm() {
    PATH="$(echo $PATH | sed -e "s;\(^\|:\)${1%/}\(:\|\$\);\1\2;g" -e 's;^:\|:$;;g' -e 's;::;:;g')"
}

इन्हें किसी भी स्क्रिप्ट में रखें जिसे आप PATH वातावरण में बदलना चाहते हैं और अब आप कर सकते हैं।

pathadd "/foo/bar"
pathadd "/baz/bat" after
export PATH

आपको गारंटी है कि यदि यह पहले से ही है तो रास्ते में न जोड़ें। यदि आप अब शुरू करना चाहते हैं /baz/bat

pathrm "/baz/bat"
pathadd "/baz/bat"
export PATH

अब किसी भी पथ को सामने की ओर ले जाया जा सकता है यदि यह पहले से ही दोहरीकरण के बिना पथ में है।


आपके पीएटीएच में एक निर्देशिका की उपस्थिति के लिए जाँच करने के लिए संबंधित और क्लीनर दृष्टिकोण: unix.stackexchange.com/a/32054/135943
Wildcard

9

मैं अन्य वितरणों के लिए नहीं बोल सकता, लेकिन उबंटू में एक फ़ाइल, / etc / पर्यावरण है, जो सभी उपयोगकर्ताओं के लिए डिफ़ॉल्ट खोज पथ है। चूंकि मेरा कंप्यूटर केवल मेरे द्वारा उपयोग किया जाता है, इसलिए मैंने कोई भी निर्देशिका जो मैं अपने रास्ते में चाहता हूं, जब तक कि यह एक अस्थायी जोड़ नहीं है, जिसे मैंने एक स्क्रिप्ट में रखा है।


6

कुछ परिस्थितियाँ हैं जहाँ इसका उपयोग करके PATH=/a/b:$PATH"गलत" तरीका माना जा सकता है PATH:

  1. एक पथ जोड़ना जो वास्तव में एक निर्देशिका नहीं है।
  2. एक पथ जोड़ना जो पहले PATHसे उसी रूप में है।
  3. एक सापेक्ष पथ जोड़ना (चूंकि वास्तविक निर्देशिका में खोज की जाती है, जैसा कि आप वर्तमान कार्य निर्देशिका को बदलते हैं) बदल जाएगा।
  4. एक पथ जोड़ना जो पहले से ही PATHएक अलग रूप में है (यानी, सहानुभूति या उपयोग करने के कारण एक उपनाम ..)।
  5. यदि आप 4 करने से बचते हैं, तो सामने की ओर जाने के लिए उस रास्ते को न चलाएं PATHजब यह अन्य प्रविष्टियों को ओवरराइड करने का इरादा रखता है PATH

यह (बैश-केवल) फ़ंक्शन उपरोक्त स्थितियों में "सही काम" करता है (अपवाद के साथ, नीचे देखें), त्रुटि कोड देता है, और मनुष्यों के लिए अच्छे संदेश प्रिंट करता है। त्रुटि कोड और संदेश अक्षम किए जा सकते हैं जब वे नहीं चाहते हैं।

prepath() {
    local usage="\
Usage: prepath [-f] [-n] [-q] DIR
  -f Force dir to front of path even if already in path
  -n Nonexistent dirs do not return error status
  -q Quiet mode"

    local tofront=false errcode=1 qecho=echo
    while true; do case "$1" in
        -f)     tofront=true;       shift;;
        -n)     errcode=0;          shift;;
        -q)     qecho=':';          shift;;
        *)      break;;
    esac; done
    # Bad params always produce message and error code
    [[ -z $1 ]] && { echo 1>&2 "$usage"; return 1; }

    [[ -d $1 ]] || { $qecho 1>&2 "$1 is not a directory."; return $errcode; }
    dir="$(command cd "$1"; pwd -P)"
    if [[ :$PATH: =~ :$dir: ]]; then
        $tofront || { $qecho 1>&2 "$dir already in path."; return 0; }
        PATH="${PATH#$dir:}"        # remove if at start
        PATH="${PATH%:$dir}"        # remove if at end
        PATH="${PATH//:$dir:/:}"    # remove if in middle
    fi
    PATH="$dir:$PATH"
}

अपवाद यह है कि यह फ़ंक्शन PATHअन्य साधनों के माध्यम से जोड़े गए रास्तों को कैनोनिकलाइज़ नहीं करता है, इसलिए यदि किसी पथ के लिए गैर-विहित उर्फ ​​अंदर है PATH, तो यह एक डुप्लिकेट जोड़ देगा। PATHएक पहले से ही एक पासी प्रस्ताव है, क्योंकि एक रिश्तेदार पथ के पास जाने के बाद एक स्पष्ट अर्थ है, prepathलेकिन जब पहले से ही पथ में आपको पता नहीं है कि वर्तमान कामकाजी निर्देशिका क्या थी जब इसे जोड़ा गया था।


सापेक्ष रास्तों के बारे में: एक '-r' स्विच होने के बारे में क्या है, जो पहले इसे पूर्ण किए बिना पथ को जोड़ेगा, और जो इसे जोड़ने से पहले इसे भी निरपेक्ष की तरह देखेगा? यदि यह स्क्रिप्ट थी, तो कोई इसे अन्य गोले में उपयोग कर सकता है। क्या यह एक समारोह के रूप में होने का कोई लाभ है? अच्छा कोड!
होइजुई

1
@hoijui यह एक फ़ंक्शन है क्योंकि यह वर्तमान वातावरण को संशोधित कर रहा है। यदि यह एक स्क्रिप्ट थी, तो यह स्क्रिप्ट को चलाने वाले सबप्रोसेस के वातावरण को संशोधित करेगा, और जब स्क्रिप्ट से बाहर निकलेगा तो आपके पास $PATHपहले जैसा ही होगा । के रूप में -r, नहीं, मुझे लगता है कि रिश्तेदार रास्ते $PATHबस अविश्वसनीय और अजीब हैं (आपका रास्ता हर बार बदल जाता है cd!) एक सामान्य उपकरण में ऐसा कुछ समर्थन करना चाहते हैं।
कर्ट जे। सैम्पसन

5

मेरे लिए (मैक ओएस एक्स 10.9.5 पर), /mypathnameफ़ाइल में पथ का नाम (जैसे ) जोड़कर /etc/pathsबहुत अच्छा काम किया।

संपादन से पहले, echo $PATHरिटर्न:

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

/etc/pathsशेल को संपादित करने और पुनः आरंभ करने के बाद , $ PATH चर के साथ जोड़ा जाता है /pathname। वास्तव में, echo $PATHरिटर्न:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

क्या हुआ कि चर के /mypathnameलिए जोड़ दिया गया है $PATH


3
/Etc/paths.d निर्देशिका में फ़ाइल जोड़ने से बेहतर है कि / etc / पथ फ़ाइल को संपादित करें।
रबेवर सेप

4

PATHपर्यावरण चर में एक नया पथ जोड़ने के लिए :

export PATH=$PATH:/new-path/

के लिए यह परिवर्तन आप खोलना हर खोल करने के लिए लागू किया जाना है, जिस फ़ाइल को खोल जाएगा में जोड़ने स्रोत है जब यह शुरू हो जाती है। विभिन्न गोले में यह हो सकता है:

  • बैश शैल: ~ / .bash_profile, ~ / .bashrc या प्रोफ़ाइल
  • Korn Shell: ~ / .kshrc या .profile
  • Z शैल: ~ / .zshrc या .zprofile

जैसे

# export PATH=$PATH:/root/learning/bin/
# source ~/.bashrc
# echo $PATH

आप उपरोक्त आउटपुट में दिए गए पथ को देख सकते हैं।


4

यहाँ मेरा समाधान है:

PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: '!x[$0]++' | sed "s/\(.*\).\{1\}/\1/")

एक अच्छा आसान एक लाइनर जो एक अनुगामी नहीं छोड़ता है :


1
-bash: awk: ऐसा कोई फ़ाइल या निर्देशिका -bash: sed: ऐसी कोई फ़ाइल या निर्देशिका
davidcondrey

1
@davidcondrey - awk और sed बहुत ही सामान्य बाहरी कमांड हैं। यह उत्तर समान प्राप्त करने का एक शुद्ध तरीका प्रदान करता है, इसलिए यह उन मामलों में भी काम करता है जब awk और / या sed मौजूद नहीं होते हैं (या उनकी संबंधित निर्देशिका पथ में नहीं हैं!)
sancho.s
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.