क्या मेरे पीएटीएच में एक निर्देशिका को जोश में जोड़ने का एक तरीका है यदि यह पहले से मौजूद नहीं है?


15

क्या मेरे पीएटीएच में एक निर्देशिका जोड़ने के लिए zsh में एक आसान तरीका है यदि यह पहले से मौजूद नहीं है? (या, अधिक आम तौर पर, किसी भी पर्यावरण चर)। मैंने कोशिश की:

PATH+=/my/directory

... लेकिन अगर इसे दो बार निष्पादित किया जाता है, तो यह दो बार जुड़ जाता है।


2
@uther, यह एक डुप्लिकेट नहीं है क्योंकि अन्य प्रश्न बैश के लिए था, जबकि यह एक zsh के लिए है, जिसका इस मुद्दे को संबोधित करने का अपना तरीका है।
स्टीफन चेज़लस

जवाबों:


32

में zsh $PATHबंधा हुआ है (देखें typeset -T) करने के लिए $pathसरणी। आप उस सरणी को इसके साथ अद्वितीय मान रखने के लिए बाध्य कर सकते हैं :

typeset -U path

और फिर, के साथ पथ जोड़ें:

path+=(~/foo)

अगर यह पहले से ही था तो चिंता किए बिना।

इसे मोर्चे पर जोड़ने के लिए, करें:

path=(~/foo "$path[@]")

या:

path[1,0]=~/foo

अगर ~/fooवह पहले से ही था तो उसे $pathआगे ले जाएगा।


क्या आपका मतलब नहीं है typeset -Ug path? जब मैं typeset -U pathअपनी ~/.zshrcफ़ाइल में उपयोग करता हूं , मुझे हमेशा एक त्रुटि मिलती है कि मार्ग में कुछ भी नहीं है, जबकि zshrc चल रहा है
kalbasit

@eMxyzptlk, अजीब है। -gगुंजाइश को सीमित करने से बचने के लिए है, लेकिन में ~/.zshrc, गुंजाइश पहले से ही वैश्विक है। इसके अलावा, मैंने कभी भी zshएक खाली के बारे में शिकायत नहीं देखी है $PATH(सिवाय इसके कि कमांड को निश्चित रूप से त्रुटियां नहीं मिली हैं)।
स्टीफन चेज़लस

3

export -U PATH=~/foo${PATH:+:$PATH}अपनी किसी स्टार्टअप फ़ाइल में जोड़ें । -Uसरणियों या कुछ में किसी मान की केवल पहली घटना रहता :पथ की तरह सीमांकित चर।


-3

आपको कुछ करना होगा:

if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi

यह केवल तभी काम करता है जब newpathसीमांकित बू दो ':', उन मामलों पर विचार करने की आवश्यकता है जब यह शुरुआत या अंत में समान है।

Urgh।


1
आप केवल बॉर्न / POSIX सुविधाओं के साथ शेल के अंदर ऐसा कर सकते हैं। यह सिरदर्द को कम करने से बचा जाता है (कम से कम ऐसा करें echo "$PATH": हमेशा दोहरे विकल्प को चर प्रतिस्थापन के आसपास रखें )। case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
गिलेस एसओ- बुराई को रोकें '26
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.