zsh config - निर्यात करने के लिए या निर्यात करने के लिए नहीं?


23

अपने में चर सेट करते समय ~/.zshrcमैं या तो उपयोग कर सकता हूंexport

export PATH=/some/path

या नहीं

PATH=/some/path

ये कैसे भिन्न होते हैं और मुझे किसका उपयोग करना चाहिए?


पर्यावरणीय चर जो गैर-संवादात्मक गोले द्वारा उपयोग किए जाते हैं (जैसे, आपके द्वारा लिखा गया एक शेल स्क्रिप्ट) में जाना चाहिए .zshenv
फ्रांसिस्को

है ~/.zshenvके रूप में अच्छी तरह से लॉगिन गोले से sourced? PATHवहाँ परिभाषित किया जाना चाहिए ?
जोर्डेलर

1
PATHशायद एक चर का सबसे अच्छा उदाहरण है जिसे अंदर परिभाषित किया जाना चाहिए ~/.zshenv, यह फ़ाइल किसी भी zsh सत्र द्वारा sourced हो जाती है (जब तक कि आप उस बंद करने के लिए कुछ विकल्प का उपयोग नहीं करते हैं)। man zshकौन सी फाइलें खट्टी हुई और किस क्रम में हुईं, इसकी समीक्षा के लिए देखें ।
फ्रांसिस्को

ठीक है, धन्यवाद @Francisco मैं मैन पेज पढ़ूंगा।
जोर्डेलर

जवाबों:


21

यदि आप चाहते हैं कि प्रोग्राम zsh से चलते हुए var को देखें, तो इसे निर्यात करें।
पथ के लिए, आप शायद निर्यात करना चाहते हैं।
इसके बजाय export PATH=/some/pathआप शायद चाहते हैं export PATH="$PATH:/some/path", जब तक कि आप सिस्टम पूर्व निर्धारित पथ को पूरी तरह से खाली करने का इरादा न करें।


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

21

Demure ने पहले से ही आपके विशिष्ट प्रश्न का उत्तर दिया है। हालाँकि यह एक zshप्रश्न और है PATH। तो यहां एक और बिंदु है: मानक चर के अलावा $PATH, $pathएक सरणी भी है। यहाँ आप अंतर देखते हैं (कॉलन या नहीं ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

दोनों वेरिएंट स्वचालित रूप से सिंक में रखे जाते हैं। तो, एक सरणी का उपयोग करने का क्या लाभ है?

  • उत्तरार्द्ध आप के माध्यम typeset -U pathसे घोषित कर सकते हैं "प्रत्येक दोहराए गए मूल्य की केवल पहली घटना को रखें" (से man zshbuiltins)। इसका मतलब है कि यह आपके रास्ते को साफ रखता है, भले ही आप क्रमिक रूप से अपना स्रोत बनाते हैं ~/.zshrc(क्योंकि आपने इसे या जो भी बदल दिया है) और इसे बार-बार समान मूल्यों के साथ अव्यवस्थित न करें।
  • आप path+=(/new/path)अपने PATH में एक नई निर्देशिका जोड़ने के लिए उपयोग कर सकते हैं । एक तत्व को निकालने के लिए आपको कुछ ट्रिक्स का उपयोग करना होगा, उदाहरण के लिए /programming//q/3435355/2037712 या http://www.zsh.org/mla/users//2005/msg01132.html
  • आप आसानी से पथ के माध्यम से तत्वों पर लूप कर सकते हैं for i ($path) { print $i # or do something else }

अंत में, यहाँ मेरे विन्यास का एक अंश है:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

धन्यवाद, यह वास्तव में एक अनुवर्ती प्रश्न था। मैं इसके pathबजाय का उपयोग करके अपने पथ का प्रबंधन देखूंगा PATH
जोर्डेलर

1
मुझे यह सुनकर खुशी हुई कि मुझे पहले से ही डर था कि मैं OT हूं। Btw। एक और फायदा मैं भूल गया: आप आसानी से तत्वों के साथ लूप कर सकते हैं for i ($path) { print $i # or do something else }
MPY
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.