PATH को शेल स्क्रिप्ट में कैसे बदला जाए?


28

मेरे पास कई परियोजनाएं हैं जिनके लिए मुझे जावा / ग्रेल्स / मावेन के संस्करणों को बदलने की आवश्यकता है। मैं इसे कुछ स्क्रिप्ट के साथ संभालने की कोशिश कर रहा हूं जो बदलाव लाएगा। उदाहरण के लिए:

#!/bin/sh

export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$JAVA_HOME/bin:$PATH
export GRAILS_HOME=/cygdrive/c/dev/grails-1.0.3
export PATH=$GRAILS_HOME/bin:$PATH
export MAVEN_HOME=/cygdrive/c/dev/apache-maven-2.0.11
export PATH=$MAVEN_HOME/bin:$PATH
which java
which grails
which mvn

जब यह निष्पादित होता है, तो यह स्क्रिप्ट के संदर्भ में PATH को सफलतापूर्वक बदल देता है, लेकिन फिर स्क्रिप्ट समाप्त हो जाती है, और कोई भी परिवर्तन पूरा नहीं हुआ है।

जिस शेल में मैं वर्तमान में काम कर रहा हूं, उसके लिए मैं एक पटकथा को कैसे बदल सकता हूं?

मैं Cygwin का उपयोग कर रहा हूं।

जवाबों:


39

आपको एक नए शेल का उपयोग करना sourceया evalकरना है।

जब आप एक शेल स्क्रिप्ट चलाते हैं तो एक नया चाइल्ड शेल बनाया जाता है। यह चाइल्ड शेल स्क्रिप्ट कमांड को निष्पादित करेगा। पिता खोल पर्यावरण अछूता रहेगा कुछ भी में होता है से बच्चे को खोल।

इस स्थिति को प्रबंधित करने के लिए कई अलग-अलग तकनीकें हैं:

  1. वर्तमान शेल में कमांड की सूची के लिए फाइल सोर्सफाइल तैयार करें source:

    export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$JAVA_HOME/bin:$PATH

    और फिर इसे स्रोत

    source sourcefile

    ध्यान दें कि सोर्सफाइल की शुरुआत में -बैंग की कोई आवश्यकता नहीं है , लेकिन यह इसके साथ काम करेगा।

  2. एक स्क्रिप्ट तैयार करें evalfile.sh जो पर्यावरण को सेट करने के लिए कमांड प्रिंट करता है:

    #!/bin/sh
    echo "export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22"
    echo "export PATH=$JAVA_HOME/bin:$PATH"

    और फिर evalइसे उबले:

    eval `evalfile.sh`
  3. कॉन्फ़िगर करें और एक नया शेल चलाएं:

    #!/bin/sh
    export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$JAVA_HOME/bin:$PATH
    
    exec /bin/bash

    ध्यान दें कि जब आप exitइस शेल में टाइप करते हैं , तो आप पिता के पास लौट आएंगे ।

  4. अपने में एक उपनाम रखें ~/.bashrc:

    alias prepare_environ='export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$JAVA_HOME/bin:$PATH;'

    और जरूरत पड़ने पर फोन करें:

    prepare_environ

1
मैंने देखा कि sourceकेवल के लिए काम करता है bash। के लिए आउटपुट ksh: /bin/ksh: source: not found, के लिए sh: sh: 0: source: not found। इन गोले के लिए नीचे दिए गए जवाब पर विचार किया जाना चाहिए।
डैनी लो

@dannylo, आप सही हैं लेकिन सवाल स्पष्ट रूप से bashकेंद्रित है।
andcoz

क्या $ PATH के साथ 'निर्यात' की आवश्यकता है - जो संभवतः पहले से मौजूद है?
१६

@esskov आमतौर पर यह नहीं है। मुझे याद है कि AIX पर sh का केवल एक पुराना पुराना संस्करण है जिसकी उसे आवश्यकता थी (लगभग 1992) लेकिन, शायद, यह किसी प्रकार का बग था।
andcoz

19

आप स्रोत बिलिन का उपयोग करके ऐसा कर सकते हैं :

. script_name

कुछ गोले एक उपनाम नाम स्रोत प्रदान करते हैं :

source script_name

-1

स्थापित Chocolatey @ यूनिक्स, आप अपने मौजूदा सत्र में अद्यतन पर्यावरण चर प्राप्त करने के लिए RefreshEnv चला सकते हैं

विस्तार


1
प्रश्न जो आपने लिंक किया है (और उसके उत्तर) विंडोज के बारे में हैं।   यह प्रश्न यूनिक्स और लिनक्स के बारे में है, इसलिए आपकी पोस्ट इस प्रश्न का उत्तर नहीं देती है ।
जी-मैन का कहना है कि 'मोनिका' '

इंस्टॉल किया गया Chocolatey @ unix
y y y

ठीक है, आप दावा करते हैं कि यह उत्तर यूनिक्स के लिए काम करता है। आपका विवरण लिंक अभी भी अप्रासंगिक है। कृपया यह जानकारी प्रदान करें कि यह यूनिक्स में कैसे काम करता है। आधिकारिक दस्तावेजों के लिंक अच्छे होंगे, लेकिन सिर्फ लिंक पोस्ट न करें; प्रासंगिक जानकारी को अपने उत्तर में रखें। … कृपया टिप्पणियों में प्रतिक्रिया न दें; इसे स्पष्ट और अधिक पूर्ण बनाने के लिए अपना उत्तर संपादित करें।
जी-मैन का कहना है कि 'मोनिका'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.