ओएस एक्स पर पर्यावरण चर सेट करना


849

OS X में PATH जैसे पर्यावरण चर को संशोधित करने का उचित तरीका क्या है?

मैंने Google पर थोड़ा गौर किया है और संपादित करने के लिए तीन अलग-अलग फाइलें मिली हैं:

  • / Etc / पथ
  • ~ / .Profile
  • ~ / .Tcshrc

मेरे पास इन फ़ाइलों में से कुछ भी नहीं है, और मुझे पूरा यकीन है कि .tcshrc गलत है, क्योंकि OS X अब bash का उपयोग करता है। ये चर, विशेष रूप से PATH, को कहां परिभाषित किया गया है?

मैं OS X v10.5 (तेंदुआ) चला रहा हूं ।


env "switch.1.disabled=true" open -n /Applications/Eclipse.app/एक नए सेट सिस्टम वातावरण के साथ GUI एप्लिकेशन लॉन्च करने के लिए।
हाँग

इन्हें भी देखें: stackoverflow.com/questions/25385934/…
थॉमस '

जवाबों:


652

ब्रूनो सही रास्ते पर है। मैंने व्यापक शोध किया है और यदि आप सभी GUI अनुप्रयोगों में उपलब्ध चर सेट करना चाहते हैं, तो आपका एकमात्र विकल्प है /etc/launchd.conf

कृपया ध्यान दें कि पर्यावरण.प्लेस्ट स्पॉटलाइट के माध्यम से लॉन्च किए गए एप्लिकेशन के लिए काम नहीं करता है। यह यहाँ स्टीव सेक्स्टन द्वारा प्रलेखित है

  1. एक टर्मिनल प्रॉम्प्ट खोलें

  2. प्रकार sudo vi /etc/launchd.conf(ध्यान दें: यह फ़ाइल अभी तक मौजूद नहीं है)

  3. फ़ाइल में निम्नलिखित की तरह सामग्री डालें

    # Set environment variables here so they are available globally to all apps
    # (and Terminal), including those launched via Spotlight.
    #
    # After editing this file run the following command from the terminal to update
    # environment variables globally without needing to reboot.
    # NOTE: You will still need to restart the relevant application (including
    # Terminal) to pick up the changes!
    # grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
    #
    # See http://www.digitaledgesw.com/node/31
    # and http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x/
    #
    # Note that you must hardcode the paths below, don't use environment variables.
    # You also need to surround multiple values in quotes, see MAVEN_OPTS example below.
    #
    setenv JAVA_VERSION 1.6
    setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    setenv GROOVY_HOME /Applications/Dev/groovy
    setenv GRAILS_HOME /Applications/Dev/grails
    setenv NEXUS_HOME /Applications/Dev/nexus/nexus-webapp
    setenv JRUBY_HOME /Applications/Dev/jruby
    
    setenv ANT_HOME /Applications/Dev/apache-ant
    setenv ANT_OPTS -Xmx512M
    
    setenv MAVEN_OPTS "-Xmx1024M -XX:MaxPermSize=512m"
    setenv M2_HOME /Applications/Dev/apache-maven
    
    setenv JMETER_HOME /Applications/Dev/jakarta-jmeter
  4. Vi में अपने परिवर्तनों को सहेजें और अपने Mac को रिबूट करें। या ऊपर दिए गए कोड टिप्पणी में दिखाए गए grep/ xargsआदेश का उपयोग करें ।

  5. साबित करें कि आपके चर एक टर्मिनल विंडो खोलकर और टाइप करके काम कर रहे हैं exportऔर आपको अपने नए चर देखने चाहिए। ये IntelliJ IDEA और अन्य GUI अनुप्रयोगों में भी उपलब्ध होंगे जो आप स्पॉटलाइट के माध्यम से लॉन्च करते हैं।


3
मैं कह रहा हूं कि स्वीकृत उत्तर (पर्यावरण.प्लिस्ट) मेरे लिए सफल नहीं रहा है। मैंने सफलतापूर्वक लॉन्च किया है। चार मशीनों पर 10.5 और 10.6 पर लॉन्चडकॉन दृष्टिकोण।
मैथ्यू मैकुलॉ

54
क्या सिस्टम रिबूट किए बिना ऐसा करने का कोई तरीका है ?

40
ऊपर वर्णित सीमा MacOS X 10.5 पर लागू होती है। हालाँकि MacOS X 10.6 में यह सीमा नहीं है और वातावरण के अंदर मूल्यों को स्थापित करता है। स्पॉटलाइट के माध्यम से लॉन्च किए गए ऐप्स के लिए भी यह ठीक काम करता है। तो हिम तेंदुए के लिए चयनित उत्तर सही है ;-)
लुई जैकोमेट

5
सेटिंग launchd.confएक तरीका है, लेकिन रिबूट (लॉन्च को पुनः आरंभ करने के लिए) की आवश्यकता है। यदि आप रिबूट से बचना चाहते हैं, तो मेरा उत्तर देखें stackoverflow.com/questions/135688/…
मैट कर्टिस

23
प्रस्तुत लॉन्च दृष्टिकोण के साथ कई समस्याएं हैं। अधिकांश पाथ पर्यावरण चर के लिए विशिष्ट हैं, लेकिन पूछने वाले ने विशेष रूप से पथ का उल्लेख किया। 1) लॉन्चड.कॉन्फ़ में आइटम इंटरेक्टिव शेल में लागू नहीं होते हैं जैसे कि सिस्टम में ssh। 2) लाइन "सेटेन पेट / टेस्टडिर" टर्मिनल.एपीएच में संलग्न है, लेकिन ओएस एक्स एप्लीकेशन के वातावरण में अन्य सभी पैथ आइटम को उड़ा देता है। 3) Doet "setenv PATH $ {PATH}: / testdir" in /etc/launchd.conf ठीक से मौजूदा $ PATH 4 का विस्तार नहीं करता है) लॉन्च.एक के बजाय सभी उपयोगकर्ताओं पर लागू होता है। ऐसा नहीं है कि मेरे पास कोई बेहतर सोल है।
नूह डेसी

257

स्पॉटलाइट (रिबूट की आवश्यकता के बिना) द्वारा शुरू की गई नई प्रक्रियाओं के लिए वातावरण कैसे सेट करें

आप लॉन्च किए गए वातावरण का उपयोग कर सकते हैं (और, विस्तार से, स्पॉटलाइट से कुछ भी शुरू हुआ) launchctl setenv। उदाहरण के लिए पथ सेट करने के लिए:

launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

या यदि आप अपना रास्ता तय करना चाहते हैं, तो क्या आपने .bashrcइसे लॉन्च किया है:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv PATH $PATH

रिबूट करने की कोई आवश्यकता नहीं हैयदि आप बदले हुए वातावरण को चुनना चाहते हैं, तो आपको किसी ऐप ।

इसमें पहले से ही टर्मिनल.app के तहत चलने वाले कोई भी गोले शामिल हैं, हालांकि यदि आप वहां हैं तो आप पर्यावरण को और अधिक सीधे सेट कर सकते हैं, जैसे कि export PATH=/opt/local/bin:/opt/local/sbin:$PATH .app के बैश या ज़ीश के लिए।

रिबूट के बाद बदलाव कैसे रखें

रिबूट के बाद परिवर्तन रखने के लिए आप पर्यावरण चर को सेट कर सकते हैं /etc/launchd.conf, जैसे:

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

launchd.conf रिबूट होने पर स्वचालित रूप से निष्पादित किया जाता है।

यदि आप चाहते हैं कि ये परिवर्तन अभी प्रभावी हों, तो आपको इस आदेश का उपयोग launchctl.confपुनरावृत्ति के लिए करना चाहिए (धन्यवाद टिप के लिए @mklement!)

egrep -v '^\s*#' /etc/launchd.conf | launchctl

आप इस बारे में अधिक जानकारी प्राप्त कर सकते हैं launchctlकि यह launchd.confकमांड के साथ कैसे लोड होता है man launchctl


2
बहुत अच्छा! पर्यावरण का उपयोग करने का लाभ। हालांकि, ऐसा लगता है कि ओएस एक्स पहले टर्मिनल को आग लगाने की परेशानी के बिना उस फ़ाइलों की सामग्री का सम्मान करता है। वैसे भी, मुझे लगता है कि आपका जवाब मुख्य रूप से एक रिबूट की आवश्यकता से बचने पर केंद्रित है, इसलिए उसके लिए thx।
fotNelton 8

2
@kapuzineralex हाँ यह एक रिबूट से बचा जाता है, यह स्पॉटलाइट से शुरू होने वाले कार्यक्रमों के लिए पर्यावरण को भी बदलता है, जो environment.plistऐसा नहीं करता है।
मैट कर्टिस

2
इस तरह से माहौल सेट करना मेरे लिए केवल तब तक काम करता था जब तक कि मैंने रिबूट नहीं किया। मैक को रिबूट करने के बाद पर्यावरण चर नहीं रहा। मैथ्यू के जवाब ने मेरे लिए पूरी तरह से काम किया।
शामल करुणारत्ने

8
@ शमल: मैंने आपकी टिप्पणी को +1 किया, लेकिन मैथ्यू के जवाब को ध्यान में रखते हुए एक रिबूट की आवश्यकता है, जबकि मैं इसे रिबूट के बिना बदलने का सही तरीका बता रहा हूं। यदि आप दोनों चाहते हैं, तो मैं सुझाव देता हूं कि आप अपनी पथ सेटिंग्स को लॉन्च में डाल दें ।conf (इसलिए वे रिबूट के दौरान बने रहते हैं), और फिर इस तरह के "स्रोत /etc/launchctl.conf; कुछ अन्य के साथ एक स्क्रिप्ट का उपयोग करें; लॉन्च सेटलमेंट PATH $ PATH", इसलिए जब आप रिबूट नहीं करना चाहते हैं तो आप "ताज़ा" भी कर सकते हैं।
मैट कर्टिस

5
@MattCurtis क्या आप अपने उत्तर को सीधे यह स्पष्ट करने के लिए संपादित कर सकते हैं कि जब कोई रीबूट आवश्यक नहीं है, तो रिबूट के बाद परिवर्तन वास्तव में खो जाएंगे ? इसके अलावा, सही ढंग से परिवर्तनों को लागू करने etc/launchd.confके लिए एक रिबूट में @ MatthewMcCullough के जवाब दृष्टिकोण का उपयोग करने से पहले होगा: egrep "^setenv\ " /etc/launchd.conf | xargs -t -L 1 launchctl
mklement0

106

करने के लिए और सहित ऊपर ओएस एक्स v10.7 (शेर) आप उन्हें में सेट कर सकते हैं:

~/.MacOSX/environment.plist

देख:

टर्मिनल में पथ के लिए, आप में सेट करने के लिए सक्षम होना चाहिए .bash_profileया .profile(आप शायद ही यह बनाना होगा)

के लिए ओएस एक्स v10.8 (माउंटेन शेर) और उससे आगे आप उपयोग करने की आवश्यकता launchdहै औरlaunchctl


4
यह केवल तभी है जब आप वास्तव में उम्मीद करते हैं कि वे ग्राफिकल ऐप द्वारा उपयोग किए जाएंगे। चूंकि ये आमतौर पर पर्यावरण चर का उपयोग नहीं करते हैं, इसलिए यह उन्हें स्थापित करने के लिए बहुत अच्छी जगह नहीं है।
क्रिस हैनसन

18
ग्राफिकल ऐप्स के कुछ बहुत अच्छे उदाहरण हैं जो पर्यावरण चर का उपयोग करते हैं। उदाहरण के लिए, इंटेलीजे को यह जानने में सक्षम होना पसंद है कि मावेन कहां रहता है। चर को देखने के लिए इसे प्राप्त करने के लिए, आपको इसे environment.plist के बजाय /etc/launchd.conf में सेट करना होगा।
मैथ्यू मैक्कलॉ

3
संदर्भ के लिए: preferences.plistओएस एक्स 10.5 के साथ उपयोग करना आदर्श से कम preferences.plistनहीं था क्योंकि उस समय स्पॉटलाइट के माध्यम से लॉन्च किए गए अनुप्रयोगों के लिए नहीं पढ़ा गया था, लुई द्वारा मैथ्यू के उत्तर और email.esm.psu.edu/pipermail/macosx.emacs/2010-May पर टिप्पणी देखें /002113.html । OS X के लिए 10.6 environment.plistउसी तरह काम करता है जैसे इसे करना चाहिए।
Janus


1
@tim_yates क्या आप अपने उत्तर की पहली पंक्ति " शेर और (10. * 7 *)" को पढ़ने के लिए संपादित कर सकते हैं , जो कि सही है? मैंने उस मूल, अस्पष्ट "अप टू माउंटेन लायन" को संपादित करने की कोशिश की, और समीक्षकों ने इसे बॉट किया।
mklement0

67

एक ही स्रोत से दोनों कमांड लाइन और जीयूआई अनुप्रयोगों के लिए समाधान ( मैक ओएस एक्स v10.10 (योसेमाइट) और मैक ओएस एक्स v10.11 (एल कैपिटन) के साथ काम करता है )

मान लें कि आपके पास ~/.bash_profileनिम्नलिखित स्निपेट की तरह पर्यावरण चर परिभाषाएं हैं :

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin"
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

हमें लॉन्च एजेंट चाहिए जो प्रत्येक लॉगिन पर और कभी भी मांग पर चलेगा जो इन चर को उपयोगकर्ता सत्र में लोड करने जा रहा है। हमें इन परिभाषाओं को पार्स करने और एजेंट द्वारा निष्पादित करने के लिए आवश्यक कमांड बनाने के लिए शेल स्क्रिप्ट की भी आवश्यकता होगी।

निम्नलिखित सामग्री के साथ निर्देशिका में plistप्रत्यय (उदाहरण के लिए नाम osx-env-sync.plist) के साथ एक फ़ाइल बनाएँ ~/Library/LaunchAgents/:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>osx-env-sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-l</string>
    <string>-c</string>
    <string>
      $HOME/.osx-env-sync.sh
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

-lपैरामीटर यहाँ महत्वपूर्ण है; यह शेल स्क्रिप्ट को एक लॉगिन शेल के साथ निष्पादित करने के लिए आवश्यक है ताकि~/.bash_profile इस स्क्रिप्ट को निष्पादित करने से पहले इसे पहले स्थान पर रखा जाए।

अब, शेल स्क्रिप्ट। इसे ~/.osx-env-sync.shनिम्नलिखित सामग्रियों से बनाएं :

grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv ${envvar} ${!envvar}
done

सुनिश्चित करें कि शेल स्क्रिप्ट निष्पादन योग्य है:

chmod +x ~/.osx-env-sync.sh

अब, चालू सत्र के लिए लॉन्च एजेंट को लोड करें:

launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(रे) एक जीयूआई एप्लिकेशन लॉन्च करें और सत्यापित करें कि यह पर्यावरण चर पढ़ सकता है।

सेटअप लगातार है। यह रीस्टार्ट और रीलोगिन से बचेगा।

प्रारंभिक सेटअप (जो आपने अभी-अभी किया था) के बाद, यदि आप ~/.bash_profileअपने पूरे वातावरण में फिर से किसी भी परिवर्तन को प्रतिबिंबित करना चाहते हैं, तो launchctl load ...आदेश को पुन: निर्देशित करें जो आप चाहते हैं वह प्रदर्शन नहीं करेगा; इसके बजाय आपको निम्नलिखित की तरह एक चेतावनी मिलेगी:

<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress

लॉगआउट / लॉगिन प्रक्रिया से गुजरे बिना अपने पर्यावरण चर को पुनः लोड करने के लिए निम्नलिखित कार्य करें:

launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

अंत में सुनिश्चित करें कि आप अपने पहले से चल रहे एप्लिकेशन (टर्मिनल.एप्प सहित) को पुनः लोड कर उन्हें बदलावों से अवगत कराएँ।

मैंने यहाँ एक GitHub परियोजना के लिए कोड और स्पष्टीकरण को भी धकेल दिया है: osx-env-sync

मुझे आशा है कि यह कम से कम OS X (Yosemite & El Capitan) के नवीनतम संस्करणों के लिए अंतिम समाधान होने जा रहा है।


अच्छी तरह से काम करता है। अगर यह एक सुरक्षा खामी साबित होगी तो थोड़ा चिंतित हो जाएगा
वॉरेन पी।

3
यह समाधान एकमात्र था जिसे मैं ठीक से काम कर सकता था। महान समाधान। मुझे समझ में नहीं आ रहा है कि यह मैक पर इतना कठिन क्यों होना चाहिए ...
जॉनीटेक्स

2
यह दुर्भाग्य से एल कैपिटन पर काम नहीं करता है। Github.com/ersiner/osx-env-sync/issues/1#issuecomment-169803508 से आपकी टिप्पणी समस्या को अच्छी तरह बताती है।
13

1
इसलिए, यह समाधान काम नहीं करता है, /etc/launchd.conf का कोई प्रभाव नहीं है, Node.js अपने बाइनरी को / usr / लोकल / बिन पर इंस्टॉल करता है और यह पथ GUI ऐप्स के लिए पथ में नहीं है। इसलिए, Node का उपयोग करने वाले Git हुक, El Capitan में GUT Git ऐप्स जैसे SourceTree पर बिल्कुल भी काम नहीं करते हैं। यह भयानक है।
एमजोल

1
समस्या केवल पैठ चर के बारे में है। मुझे उम्मीद है कि हम जल्द ही कोई समाधान निकाल सकते हैं।
एरसिन एर

54
  1. करना:

    vim ~/.bash_profile

    फ़ाइल मौजूद नहीं हो सकती है (यदि नहीं, तो आप इसे बना सकते हैं)।

  2. इसमें टाइप करें और फाइल सेव करें:

    export PATH=$PATH:YOUR_PATH_HERE
  3. Daud

    source ~/.bash_profile

+1 export, जो मैं सुझाव देने जा रहा था, क्योंकि BASH समर्थन नहीं करताsetenv
vol7ron

अभी के लिए काम करता है। यह पूरी चीज़ मेरे विचार से बहुत अधिक जटिल लगती है। बाद में इन सभी के लिए कुछ और समय समर्पित करना होगा। धन्यवाद।
रुतो कॉलिन्स

34

ओएस एक्स में पर्यावरण चर के साथ काम करते समय हल करने के लिए अनिवार्य रूप से दो समस्याएं हैं। पहला है जब स्पॉटलाइट से प्रोग्राम ला रहा है (मैक मेनू / स्थिति पट्टी के दाईं ओर आवर्धक ग्लास आइकन) और दूसरा जब डॉक से प्रोग्राम ला रहा है। । टर्मिनल एप्लिकेशन / उपयोगिता से कार्यक्रमों को आमंत्रित करना तुच्छ है क्योंकि यह मानक शेल स्थानों से पर्यावरण को पढ़ता है ( ~/.profile,, ~/.bash_profile)~/.bashrc , आदि)

डॉक से कार्यक्रमों को आमंत्रित करते समय, उपयोग करें ~/.MacOSX/environment.plist जहां <dict>तत्व में अनुक्रम होता है <key>KEY</key><string>theValue</string> तत्वों है।

स्पॉटलाइट से प्रोग्राम लाते समय, सुनिश्चित करें कि लॉन्चड को आपके द्वारा आवश्यक सभी कुंजी / मान सेटिंग्स के साथ सेटअप किया गया है।

दोनों समस्याओं को एक साथ हल करने के लिए, मैं अपने उपयोगकर्ता खाते पर एक लॉगिन आइटम (सिस्टम प्राथमिकता उपकरण के माध्यम से सेट) का उपयोग करता हूं। लॉगिन आइटम एक बैश स्क्रिप्ट है जो एक Emacs लिस्प फंक्शन को आमंत्रित करता है, हालांकि एक ही चीज़ को पूरा करने के लिए अपने पसंदीदा स्क्रिप्टिंग टूल का उपयोग कर सकता है। इस दृष्टिकोण का जोड़ा लाभ है कि यह किसी भी समय काम करता है और रिबूट की आवश्यकता नहीं होती है, अर्थात कोई भी संपादन कर सकता है ~/.profile, कुछ शेल में लॉगिन आइटम को चला सकता है और डॉक या स्पॉटलाइट से या तो नए इनवॉइस किए गए कार्यक्रमों के लिए दिखाई देने वाले परिवर्तन हो सकते हैं।

विवरण:

लॉगिन आइटम: ~/bin/macosx-startup

#!/bin/bash
bash -l -c "/Applications/Emacs.app/Contents/MacOS/Emacs --batch -l ~/lib/emacs/elisp/macosx/environment-support.el -f generate-environment"

Emacs लिस्प फ़ंक्शन: ~/lib/emacs/elisp/macosx/envionment-support.el

;;; Provide support for the environment on Mac OS X

(defun generate-environment ()
  "Dump the current environment into the ~/.MacOSX/environment.plist file."
  ;; The system environment is found in the global variable:
  ;; 'initial-environment' as a list of "KEY=VALUE" pairs.
  (let ((list initial-environment)
        pair start command key value)
    ;; clear out the current environment settings
    (find-file "~/.MacOSX/environment.plist")
    (goto-char (point-min))
    (setq start (search-forward "<dict>\n"))
    (search-forward "</dict>")
    (beginning-of-line)
    (delete-region start (point))
    (while list
      (setq pair (split-string (car list) "=")
            list (cdr list))
      (setq key (nth 0 pair)
            value (nth 1 pair))
      (insert "  <key>" key "</key>\n")
      (insert "  <string>" value "</string>\n")

      ;; Enable this variable in launchd
      (setq command (format "launchctl setenv %s \"%s\"" key value))
      (shell-command command))
    ;; Save the buffer.
    (save-buffer)))

नोट: यह समाधान उन लोगों का एक समामेलन है, जो मेरे द्वारा जोड़े जाने से पहले, विशेष रूप से मैट कर्टिस द्वारा प्रस्तुत किए गए हैं, लेकिन मैंने जानबूझकर अपने ~/.bash_profileकंटेंट प्लेटफ़ॉर्म को स्वतंत्र रखने की कोशिश की है और launchdपर्यावरण की सेटिंग (एक मैक केवल सुविधा) को एक अलग स्क्रिप्ट में डाल दिया है ।


19
वाह। मैं यह नहीं
कहूंगा

2
यह 10.9 के लिए मेरे द्वारा देखे गए सभी समाधानों में से सबसे अच्छा काम करता है। एकमात्र दोष यह है कि, चूंकि लॉगिन आइटम एक अनिश्चित क्रम में चलते हैं, अगर Emacs (उदाहरण के लिए) लॉगिन पर लॉन्च किया गया है (क्योंकि यह लॉगआउट में खुला था, उदाहरण के लिए), यह जरूरी नहीं कि पर्यावरण चर तब तक हो जब तक आप इसे पुनः आरंभ नहीं करते। , क्योंकि यह आपकी स्क्रिप्ट से पहले लॉन्च किया गया है।
टेलोटोर्टियम

22

एक और, नि: शुल्क, ओपनसोर्स, मैक ओएस एक्स v10.8 (माउंटेन लायन) वरीयता फलक / पर्यावरण। समाधान समाधान EnvPane है

EnvPane का सोर्स कोड GitHub पर उपलब्ध है । EnvPane है जैसे कि यह करने के लिए तुलनीय सुविधाओं की है लग रहा है RCEnvironment , तथापि, यह यह यानी तुरन्त अपने संग्रहीत चर अद्यतन कर सकते हैं, लगता है के बिना पुन: प्रारंभ करने या लॉगिन है, जो स्वागत है के लिए की जरूरत।

जैसा कि डेवलपर ने कहा है:

EnvPane Mac OS X 10.8 (माउंटेन लायन) के लिए एक प्राथमिकता फलक है जो आपको ग्राफिकल और टर्मिनल दोनों सत्रों में सभी कार्यक्रमों के लिए पर्यावरण चर सेट करने देता है। इतना ही नहीं, यह माउंट / लायन में ~ / .MacOSX / environment.plist के लिए समर्थन को पुनर्स्थापित करता है, यह आपके पर्यावरण में तुरंत परिवर्तन भी प्रकाशित करता है, बिना लॉग आउट और बैक इन करने की आवश्यकता के बिना। <SNIP> EnvPane में (और स्वचालित रूप से) शामिल हैं। लॉन्च एजेंट जो लॉगिन के बाद 1) जल्दी चलता है और 2) जब भी ~ / .MacOSX / environment.plist बदलता है। एजेंट ~ / .MacOSX / environment.plist को पढ़ता है और उस फ़ाइल से पर्यावरण वेरिएबल्स को उसी उपयोगकर्ता के लॉन्च उदाहरण के लिए उसी API के माध्यम से निर्यात करता है, जिसका उपयोग लॉन्चर cctenv और launchctl unsetenv द्वारा किया जाता है।

डिस्क्लेमर: मैं किसी भी तरह से डेवलपर या उसके प्रोजेक्ट से संबंधित नहीं हूं।

PS मुझे नाम पसंद है ('एंड्स पेन' जैसा लगता है)।


2
EnvPane फिलहाल PATH को सेट नहीं कर सकता है। अधिक जानकारी के लिए मेरी बग रिपोर्ट देखें: github.com/hschmidt/EnvPane/issues/5
Uwe Günther

I ♥ think इस बात को .. केवल दोष .. जो मुझे लगता है कि कोई भी समाधान का शिकार होगा .. एक प्रक्रिया को पुनः आरंभ करने के लिए है - नए "वातावरण" को प्राप्त करने के लिए। वोनक जीता।
एलेक्स ग्रे

2
@sorin: क्या आप जिस समस्या का सामना कर रहे हैं, उसके विवरण के साथ GitHub साइट पर एक समस्या खोल सकते हैं? EnvPane मेरे लिए 10.10 पर काम करता है। अस्वीकरण: मैं EnvPane का लेखक हूं।
हैन्स

17

अपडेट (2017-08-04)

के रूप में (कम से कम) macOS 10.12.6 (सिएरा) इस विधि ने अपाचे httpd (दोनों systemऔर userविकल्प के लिए launchctl config) के लिए काम करना बंद कर दिया है । अन्य कार्यक्रम प्रभावित नहीं दिखते। यह बोधगम्य है कि यह httpd में बग है।

मूल उत्तर

यह चिंता OS X 10.10+ (10.11+ विशेष रूप से रूटलेस मोड के कारण है जहां /usr/binअब लेखन योग्य नहीं है)।

मैंने कई स्थानों पर पढ़ा है कि ओएस एक्स में बग के कारण चर launchctl setenv PATH <new path>सेट करने का उपयोग करना PATHकाम नहीं करता है (जो व्यक्तिगत अनुभव से सच लगता है)। मैंने पाया कि शेल से लॉन्च नहीं किए गए अनुप्रयोगों केPATH लिए एक और तरीका हो सकता है :

sudo launchctl config user path <new path>

यह विकल्प लॉन्च मैनल पेज में प्रलेखित है:

विन्यास प्रणाली | उपयोगकर्ता पैरामीटर मान

लॉन्च (8) डोमेन के लिए लगातार कॉन्फ़िगरेशन जानकारी सेट करता है। केवल सिस्टम डोमेन और उपयोगकर्ता डोमेन कॉन्फ़िगर किए जा सकते हैं। लगातार भंडारण का स्थान एक कार्यान्वयन विवरण है, और उस संग्रहण में परिवर्तन केवल इस उप-क्षेत्र के माध्यम से किया जाना चाहिए। इस प्रभाव को प्रभावी करने के लिए इस सबमांड के माध्यम से एक रिबूट की आवश्यकता होती है।

[...]

पथ

लक्ष्य डोमेन के भीतर स्ट्रिंग मान के लिए सभी सेवाओं के लिए पथ पर्यावरण चर सेट करता है। स्ट्रिंग मान को environ (7) में PATH पर्यावरण चर के लिए उल्लिखित प्रारूप के अनुरूप होना चाहिए। ध्यान दें कि यदि कोई सेवा अपने स्वयं के PATH को निर्दिष्ट करती है, तो सेवा-विशिष्ट वातावरण चर पूर्वता लेगा।

नोट: इस सुविधा का उपयोग डोमेन के भीतर सभी सेवाओं के लिए सामान्य वातावरण चर सेट करने के लिए नहीं किया जा सकता है। यह जानबूझकर पैठ पर्यावरण के लिए सक्षम है और सुरक्षा कारणों से और कुछ नहीं।

मैंने फाइंडर से शुरू किए गए GUI एप्लिकेशन के साथ काम करने के लिए इसकी पुष्टि की है (जो getenvपाथ प्राप्त करने के लिए उपयोग करता है)। ध्यान दें कि आपको केवल एक बार ऐसा करना होगा और रिबूट के माध्यम से परिवर्तन लगातार होगा।


यह मेरे लिए भी काम करता है। sudo launchctl procinfo <gui-pid>नए सेट का PATHमाहौल दिखाता है। लेकिन sudo launchctl config user path <new path>वास्तव में सभी उपयोगकर्ताओं के लिए निर्धारित ... (नए उपयोगकर्ता को जोड़कर और उदात्त पाठ के पायथन कंसोल का उपयोग करके पुष्टि की गई)
बॉसलियाव

1
ऐसा लगता है कि लॉगिन पर फिर से खुलने वाले अनुप्रयोगों के पैठ पर्यावरण चर पर कोई प्रभाव नहीं पड़ता है (जो बंद होने पर खुले थे)।
ब्रेख्त माचिएल्स

दिलचस्प। इसका मतलब यह होगा कि उन अनुप्रयोगों के लिए जो पर्यावरण को फिर से खोल देंगे (या इसके बाद) को बचाया जा रहा है।
मैक्स लेसके

@MaxLeske नहीं, पर्यावरण चर बदलने से पहले फिर से खोलना शुरू किया जा रहा है। तो, ऐसा करने के बाद यह पहली बार नहीं है sudo launchctl config user path, कि ऐसा होता है (जिसे आप मान रहे हैं?)।
ब्रेख्त मचिएल्स

1
@ShlomiSchwartz launchctlकरता नहीं आप मनमाने ढंग से वातावरण चर सेट करने के लिए अनुमति देते हैं। PATHचर एक अपवाद है।
मैक्स लेसके

17

माउंटेन लायन पर /etc/pathsऔर /etc/launchd.confसंपादन का कोई प्रभाव नहीं पड़ता है!

Apple के डेवलपर फ़ोरम कहते हैं:

".App की जानकारी को बदलने के लिए।

~ / .MacOSX / environment.plist अब समर्थित नहीं है। "

इसलिए मैंने सीधे आवेदन को संपादित किया Info.plist("AppName.app" पर राइट क्लिक करें (इस मामले में SourceTree) और फिर " Show package contents")।

पॅकेज की विषय वास्तु दिखाओ

और मैंने एक नई कुंजी / तानाशाह जोड़ा जोड़ा:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(देखें: Apple में LaunchServicesKeys प्रलेखन )

यहां छवि विवरण दर्ज करें

अब आवेदन (मेरे मामले में Sourcetree) दिए गए पथ का उपयोग करता है और Git 1.9.3 :-) के साथ काम करता है

पुनश्च: बेशक आपको अपने विशिष्ट पथ की जरूरतों के लिए पथ प्रविष्टि को समायोजित करना होगा।


3
यह समाधान सिस्टम पर कम से कम घुसपैठ के मानक को पूरा करता है। धन्यवाद।
जॉन वेन्स

@ जॉन वंस +1 पूरी तरह से सहमत हैं, जेसन टी। मिलर ने अपने जवाब में स्पष्ट रूप से कहा कि सिस्टम-व्यापी परिवर्तन हमेशा जोखिम भरा होता है
rmcsharry

5
एल कैपिटन में मेरे लिए इसका कोई प्रभाव नहीं है। :(
मैजोल

हाई सिएरा 10.13 पर, अगर मैं एप्लिकेशन की Info.plistफाइल को संशोधित करता हूं, तो एप्लिकेशन लोड करने में विफल रहता है:LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Slack.app.
कुंजभाई

16

हालांकि यहां उत्तर "गलत" नहीं हैं, मैं एक और जोड़ूंगा: ओएस एक्स में पर्यावरण चर परिवर्तन कभी नहीं करें जो "सभी प्रक्रियाओं" को प्रभावित करता है, या यहां तक ​​कि शेल के बाहर, सभी प्रक्रियाओं के लिए किसी उपयोगकर्ता द्वारा अंतःक्रियात्मक रूप से चलाया जाता है।

मेरे अनुभव में, सभी प्रक्रियाओं के लिए PATH जैसे पर्यावरण चर में वैश्विक परिवर्तन विंडोज की तुलना में ओएस एक्स पर चीजों को तोड़ने की अधिक संभावना है। कारण, बहुत सारे OS X अनुप्रयोग और अन्य सॉफ़्टवेयर (जिनमें, शायद, विशेष रूप से, OS के घटक ही शामिल हैं) UNIX कमांड-लाइन टूल्स पर निर्भर करते हैं, और सिस्टम के साथ प्रदान किए गए इन उपकरणों के संस्करणों के व्यवहार को मानते हैं, और ऐसा करते समय आवश्यक रूप से निरपेक्ष रास्तों का उपयोग न करें (इसी तरह की टिप्पणी गतिशील रूप से भरी हुई पुस्तकालयों और DYLD_ * पर्यावरण चर पर लागू होती है)। उदाहरण के लिए, मान लीजिए कि पायथन और रूबी जैसे दुभाषियों के ओएस एक्स-सप्लाई किए गए संस्करणों को बदलने के बारे में विभिन्न स्टैक ओवरफ्लो प्रश्नों के उच्चतम-रेटेड उत्तर आमतौर पर कहते हैं "ऐसा मत करो।"

ओएस एक्स वास्तव में इस संबंध में अन्य यूनिक्स की तरह ऑपरेटिंग सिस्टम (जैसे, लिनक्स, फ्रीबीएसडी, और सोलारिस) से अलग नहीं है; सबसे संभावित कारण Apple ऐसा करने का एक आसान तरीका प्रदान नहीं करता है क्योंकि यह चीजों को तोड़ता है । हद तक विंडोज इन समस्याओं से ग्रस्त नहीं है, यह दो चीजों के कारण है: (1) विंडोज सॉफ्टवेयर उस हद तक कमांड-लाइन टूल पर भरोसा नहीं करता है जो UNIX सॉफ्टवेयर करता है, और (2) Microsoft ने किया है "DLL नर्क" और सुरक्षा समस्याओं के ऐसे व्यापक इतिहास जो परिवर्तनों के कारण होते हैं जो सभी प्रक्रियाओं को प्रभावित करते हैं, उन्होंने PATH जैसे "वैश्विक" कॉन्फ़िगरेशन विकल्पों के प्रभाव को सीमित करने के लिए नए विंडोज संस्करणों में गतिशील लोडिंग के व्यवहार को बदल दिया है।

"लंगड़ा" या नहीं, यदि आपके पास इस तरह के परिवर्तन छोटे स्कॉप्स के लिए प्रतिबंधित हैं, तो आपके पास अधिक स्थिर प्रणाली होगी।


लोगों को यह बताने के लिए कि वे जो काम करते हैं वह नहीं करते हैं, वे पूछे गए प्रश्न का उत्तर नहीं देते हैं। लोगों को ऐसा करने से रोकना चीजों को तोड़ना भी है। एप्पल के मोडस ऑपरेंडी।
frabjous

PSEH की स्थापना LAppnvironment के प्रमुख डेवलपर के साथ /Applications/App.app/Contents/Info.plist में करें। सेटिंग / प्रिंट / ऑर्काइव / मित्रवत / General/… वर्तमान अनुशंसित समाधान हो सकता है।
डेव एक्स

15

कभी-कभी सभी पिछले उत्तर बस काम नहीं करते हैं। यदि आप M2_HOMEग्रहण में या IntelliJ IDEA में एक सिस्टम वैरिएबल (जैसे ) का उपयोग करना चाहते हैं, तो इस मामले में मेरे लिए एकमात्र काम है:

पहले (चरण 1) में /etc/launchd.confइस तरह की एक पंक्ति शामिल करने के लिए संपादित करें: "setenv VAR मान" और फिर (चरण 2) रिबूट।

बस संशोधन .bash_profile काम नहीं करेगा क्योंकि OS X में अन्य Unix'es के रूप में आवेदन शुरू नहीं किए जाते हैं; वे माता-पिता के शेल चर को विरासत में नहीं देते हैं। अन्य सभी संशोधन मेरे लिए अज्ञात कारण से काम नहीं करेंगे। हो सकता है कि कोई और इस बारे में स्पष्टीकरण दे सकता है।


5
स्पॉटलाइट से या किसी अन्य माध्यम से शुरू किए गए एप्लिकेशन में सभी /etc/launchd.conf को उनकी मूल प्रक्रिया द्वारा पढ़ा जाता है, इस प्रकार यह एक आकर्षक विकल्प बनता है जहां सभी एप्लिकेशन और शेल में दिखाई देने वाले पर्यावरण चर सेट करने के लिए।
मैथ्यू मैक्कलॉ

1
एक अन्य समाधान के लिए मेरा उत्तर देखें, जो एक रिबूट से बचा जाता है - stackoverflow.com/questions/135688/…
मैट कर्टिस

मेरे MaxOS 10.6 मशीन में /etc/launchd.conf फ़ाइल मौजूद नहीं है। क्या यह संस्करण के रूप में एक नई या अप्रचलित चीज है? या यह मशीन गड़बड़ है?
पीटर

13

पर्यावरण चर का पीछा करते हुए वरीयता फलक और पता चलता है कि लिंक टूट गया है और Apple की साइट पर एक खोज इंगित करती है कि वे इसके बारे में भूल गए हैं ... मैंने मायावी लॉन्च प्रक्रिया के निशान पर वापस शुरू किया।

मेरे सिस्टम पर (मैक ओएस एक्स 10.6.8) ऐसा प्रतीत होता है कि पर्यावरण में परिभाषित चर । स्प्लिट से लॉन्च किए गए एप्लिकेशन (लॉन्च के माध्यम से) को विश्वसनीय रूप से निर्यात किए जा रहे हैं । मेरी परेशानी यह है कि उन संस्करणों को टर्मिनल में नए बैश सत्रों में निर्यात नहीं किया जा रहा है। यानी मुझे यहाँ चित्रित की गई विपरीत समस्या है।

नोट: environment.plist जेन्सन जैसा दिखता है, एक्सएमएल नहीं, जैसा कि पहले बताया गया है

मैं ~ / MacOSX / environment.plist का संपादन करके वैर देखने के लिए स्पॉटलाइट ऐप्स प्राप्त करने में सक्षम था और मैं अपनी .profile फ़ाइल में निम्न जोड़कर एक ही vars को नए टर्मिनल सत्र में लागू करने में सक्षम था:

eval $(launchctl export)

2
ऐसा नहीं है कि मायावी: RCenvironment
Gilimanjaro

लॉन्चक्टल एक्सपोर्ट के बारे में अच्छी टिप। लेकिन मैं ऐसा नहीं करूंगा जैसा कि -प्रोफाइल में है। यह आपके $ PATH को एक के साथ अधिलेखित कर देगा जिसमें / usr / स्थानीय / बिन शामिल नहीं है। लेकिन आप अपनी रुचि के अनुसार जिन vars में रुचि रखते हैं, उन्हें चुनने के लिए regex का उपयोग कर सकते हैं: `` eval $ (प्रक्षेपण निर्यात | grep '^ my। * = =')।
१२:१३ बजे

3
मेरी नई माउंटेन लायन मशीन (१०..2.२) पर पर्यावरण। कलाकार पूरी तरह से बेकार है। सही ट्रैक के लिए मैथ्यू का जवाब देखें। यह सब लॉन्च किया गया है और /etc/launchd.conf के साथ लॉन्च होने वाला कमांड लाइन ऐप है। आप अपने आप को साथ पढ़ सकते हैं man launchd, man launchctlऔर man launchd.confमें एक टर्मिनल विंडो। ख़ुशी की बात है Apple मैक पेजों को अप टू डेट रखता है, भले ही मैक डेवलपर लाइब्रेरी थोड़ी सी पिछड़ जाए।
रसेल बी

10

बैश स्टार्टअप फ़ाइलों का कोई भी - ~/.bashrc, ~/.bash_profile, ~/.profile~/.MacOSX/environment.plistGUI अनुप्रयोगों में पर्यावरण चर के लिए नामित किसी प्रकार की अजीब फ़ाइल भी है ।


10

मैट कर्टिस ने जो उत्तर दिया, वह लॉन्चटेबल के माध्यम से पर्यावरण चर निर्धारित करता है, लेकिन मैं इसे निर्यात नामक फ़ंक्शन में लपेटता हूं, ताकि जब भी मैं अपने .bash_profile में सामान्य की तरह एक चर निर्यात करता हूं, तो यह लॉन्चक्टल द्वारा भी सेट किया जाता है। ये है जो मैं करता हूं:

  1. मेरा .bash_profile पूरी तरह से एक पंक्ति में है, (यह सिर्फ व्यक्तिगत प्राथमिकता है।)

    source .bashrc
  2. मेरे .bashrc में यह है:

    function export()
    {
        builtin export "$@"
        if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
        then
            launchctl setenv "${@%%=*}" "${@#*=}"
        elif [[ ! "${@//[^ ]/}" ]]
        then
            launchctl setenv "${@}" "${!@}"
        fi
    }
    
    export -f export
  3. उपरोक्त बैश बिलिन "निर्यात" को अधिभारित करेगा और सामान्य रूप से सब कुछ निर्यात करेगा (आप नोटिस करेंगे कि मैं इसके साथ "निर्यात" निर्यात करता हूं!), फिर लॉन्च के माध्यम से ओएस एक्स ऐप के वातावरण के लिए उन्हें ठीक से सेट करें, चाहे आप निम्न में से किसी का उपयोग करें:

    export LC_CTYPE=en_US.UTF-8
    # ~$ launchctl getenv LC_CTYPE
    # en_US.UTF-8
    PATH="/usr/local/bin:${PATH}"
    PATH="/usr/local/opt/coreutils/libexec/gnubin:${PATH}"
    export PATH
    # ~$ launchctl getenv PATH
    # /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    export CXX_FLAGS="-mmacosx-version-min=10.9"
    # ~$ launchctl getenv CXX_FLAGS
    # -mmacosx-version-min=10.9
  4. इस तरह मुझे हर बार लॉंच करने के लिए हर वैरिएबल नहीं भेजना है, और मैं सिर्फ अपना .bash_profile / .bashrc सेट कर सकता हूं। एक टर्मिनल विंडो खोलें, अपने पर्यावरण चर की जांच करें जिसमें आप रुचि रखते हैं launchctl getenv myVar, अपने .bash_profile.bashrc में कुछ बदलें, टर्मिनल विंडो को बंद करें और इसे फिर से खोलें, लॉंच और फिर वायलैला के साथ चर की जांच करें, यह बदल गया है।

  5. फिर से, माउंटेन शेर की दुनिया के लिए अन्य समाधानों की तरह, किसी भी नए पर्यावरण चर के लिए एप्लिकेशन उपलब्ध होने के लिए, आपको परिवर्तन के बाद उन्हें लॉन्च या फिर से लॉन्च करने की आवश्यकता है।


1
उपयोगी उत्तर - धन्यवाद। मैंने इसे सिर्फ इसलिए अपडेट किया क्योंकि आपका मूल समाधान उन मामलों को नहीं संभालता था, जहां आपके द्वारा सेट किए जा रहे पर्यावरण चर का मान उसमें समान चिह्न था (उदाहरण के लिए, CXX_FLAGS = "- mmacosx-version-min = 10.9"
स्टीव ब्रॉगबर्ग

@SteveBroberg - बस एक चरित्र परिवर्तन बैश regexp अप sed की जरूरत के बिना ठीक करता है! (मुझे गलत मत
समझिए

1
मुझे लगा कि वहाँ एक बेहतर तरीका होना चाहिए, लेकिन मैं बैश गुरु नहीं हूं, और मैं यह नहीं बता सकता कि %%, ## क्या थे, आदि
स्टीव ब्रबर्ग

10

यहाँ आप क्या चाहते हैं करने के लिए एक बहुत ही सरल तरीका है। मेरे मामले में, यह काम करने के लिए ग्रेड (एंड्रॉइड स्टूडियो के लिए) हो रहा था।

  • टर्मिनल खोलें।
  • निम्न आदेश चलाएँ:

    sudo nano /etc/paths या sudo vim /etc/paths

  • संकेत मिलने पर अपना पासवर्ड डालें।

  • फ़ाइल के निचले भाग पर जाएं, और उस पथ को दर्ज करें जिसे आप जोड़ना चाहते हैं।
  • हिट Control+ Xकरने के लिए।
  • संशोधित बफर को बचाने के लिए 'Y' दर्ज करें।
  • फिर एक नई टर्मिनल विंडो खोलें:

    echo $PATH

आपको PATH के अंत में संलग्न नया पथ देखना चाहिए।

इस पोस्ट से मुझे ये जानकारी मिली:

मैक ओएस एक्स 10.8 माउंटेन लायन और ऊपर पर पेट में जोड़ें



7

प्रत्येक फ़ाइल का उद्देश्य क्या है, इसके बारे में संक्षिप्त और स्पष्ट होना

  • ~/.profile हर बार जब टर्मिनल शुरू किया जाता है
  • ~/.bashrc वह है जहां "परंपरागत रूप से" बैश वातावरण के लिए सभी निर्यात विवरण निर्धारित किए जाते हैं
  • /etc/paths मैक ओएस में मुख्य फ़ाइल है जिसमें सभी उपयोगकर्ताओं के लिए पैथ पर्यावरण चर बनाने के लिए डिफ़ॉल्ट पथों की सूची है
  • /etc/paths.d/ ऐसी फाइलें होती हैं जो अतिरिक्त खोज पथ रखती हैं

गैर-टर्मिनल प्रोग्राम सिस्टम वाइड पैथ और मैनपाट वैरिएबल को इनहेरिट नहीं करते हैं जो आपका टर्मिनल करता है! किसी विशिष्ट उपयोगकर्ता द्वारा शुरू की गई सभी प्रक्रियाओं के लिए वातावरण निर्धारित करने के लिए, इस प्रकार मैक ओएस एक्स जीयूआई अनुप्रयोगों के लिए पर्यावरण चर उपलब्ध ~/.MacOSX/environment.plistकरवाए जाते हैं , उन चर को आपके (Apple तकनीकी Q & A QA1067) में परिभाषित किया जाना चाहिए।

अपने environment.plistसाथ सिंक्रनाइज़ करने के लिए निम्न कमांड लाइन का उपयोग करें /etc/paths:

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"

6

/etc/launchd.conf का उपयोग OS X v10.10 (Yosemite), OS X v10.11 (El Capitan), macOS v10.12 (Sierra), या macOS v10.13 (High Sierra) में नहीं किया जाता है।


से launchctlआदमी पेज:

/etc/launchd.conf file is no longer consulted for subcommands to run during early boot time;
this functionality was removed for security considerations.

इस विधि में वर्णित विधि मेरे लिए अलग-अलग उत्तर का काम करती है (रिबूट के बाद): डॉक से लॉन्च किए गए एप्लिकेशन या स्पॉटलाइट इनहेरिट वातावरण चर जो मैं सेट करता हूं ~/Library/LaunchAgents/my.startup.plist। (मेरे मामले में, मैं सेट करने के लिए आवश्यक LANG, करने के लिए en_US.UTF-8, एक उदात्त पाठ प्लगइन के लिए।)


रिबूट पर एक लोड ऑर्डर है जो सुनिश्चित करता है कि my.startup.plist पिछले सत्र से आवेदन शुरू होने से पहले लोड किया गया होगा?
कुंजभाई


3

यह आसान है:

संपादित करें ~ /। लाभ और अनुसरण के रूप में अपने चर डाल दिया

$ vim ~ / .profile

फ़ाइल पुट में:

MY_ENV_VAR = मूल्य

  1. सहेजें (: wq)

  2. टर्मिनल को पुनरारंभ करें (इसे फिर से खोलें और खोलें)

  3. सुनिश्चित करें कि सभी ठीक हैं:

$ गूंज $ MY_ENV_VAR

$ मूल्य



3

एकल उपयोगकर्ता संशोधन के लिए, ~/.profileआपके द्वारा सूचीबद्ध लोगों का उपयोग । नीचे दी गई लिंक बताती है कि विभिन्न फाइलें बैश द्वारा कब पढ़ी जाती हैं।

http://telin.ugent.be/~slippens/drupal/bashrc_and_others

यदि आप gui अनुप्रयोगों के लिए पर्यावरण चर सेट करना चाहते हैं, तो आपको ~ / .MacOSX / environment.plist फ़ाइल की आवश्यकता है


3

खैर, मैं फ़ाइलों /etc/pathsऔर ~/.MacOSX/environment.plistफ़ाइलों के बारे में अनिश्चित हूँ । वो नए हैं।

लेकिन बैश के साथ, आपको पता होना चाहिए कि .bashrcहर नए शेल इनवोकेशन के साथ निष्पादित किया जाता है और .bash_profileकेवल स्टार्टअप पर एक बार निष्पादित किया जाता है।

मुझे नहीं पता कि मैक ओएस एक्स के साथ यह कितनी बार है। मुझे लगता है कि विंडो सिस्टम के साथ सब कुछ लॉन्च करने पर भेद टूट गया है।

व्यक्तिगत रूप से, मैं अपनी .bashrcज़रूरत की हर चीज़ के साथ एक फ़ाइल बनाकर भ्रम को समाप्त करता हूँ:

ln -s .bashrc .bash_profile

3

सुझाए गए दृष्टिकोणों के अलावा ध्यान देने वाली एक बात यह है कि, OS X 10.5 (तेंदुआ) में कम से कम, सेट किए गए चरों में launchd.confविलय किया जाएगा .profile। मुझे लगता है कि यह ~/.MacOSX/environment.plistभी सेटिंग्स के लिए मान्य होने की संभावना है, लेकिन मैंने सत्यापित नहीं किया है।


3

Mac OS पर अपना PATH पर्यावरण चर सेट करें

टर्मिनल प्रोग्राम खोलें (यह डिफ़ॉल्ट रूप से आपके एप्लिकेशन / यूटिलिटीज फ़ोल्डर में है)। निम्न आदेश चलाएँ

touch ~/.bash_profile; open ~/.bash_profile

यह आपके डिफ़ॉल्ट टेक्स्ट एडिटर में फाइल को खोलेगा।

उदाहरण के लिए एंड्रॉइड एसडीके के लिए:

आपको अपने Android SDK प्लेटफ़ॉर्म-टूल्स और टूल्स डायरेक्टरी में पथ जोड़ना होगा। मेरे उदाहरण में मैं "/ विकास / android-sdk-macosx" का उपयोग करूंगा, निर्देशिका के रूप में एसडीके स्थापित है। निम्नलिखित पंक्ति जोड़ें:

export PATH=${PATH}:/Development/android-sdk-macosx/platform-tools:/Development/android-sdk-macosx/tools

फाइल को सेव करें और टेक्स्ट एडिटर को छोड़ दें। अपने PATH को अपडेट करने के लिए अपने .bash_profile को निष्पादित करें:

source ~/.bash_profile

अब हर बार जब आप टर्मिनल प्रोग्राम खोलते हैं तो आपके PATH में Android SDK शामिल होगा।


3

बस यह वास्तव में आसान और त्वरित था। पहले टर्मिनल से एक ~ / .bash_profile बनाएँ :

touch .bash_profile

फिर

open -a TextEdit.app .bash_profile

जोड़ना

export TOMCAT_HOME=/Library/Tomcat/Home

डॉक्यूमेंट को सेव करें और आप कर रहे हैं।


Perfecto। मैंने JAVA_HOME के ​​लिए चरणों का पालन किया, बस जोड़ा गया JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_201.jdk / Contents / Home और वास्तविक त्वरित सफलता!
नरेन्द्र

ग्रेट @ नरेन्द्र!
कोडओवरराइड

2

यह काफी सरल है। फ़ाइल संपादित करें .profile(vi, नैनो , उदात्त पाठ या अन्य पाठ संपादक) फ़ाइल। आप इसे ~/निर्देशिका (उपयोगकर्ता निर्देशिका) में पा सकते हैं और इस तरह सेट कर सकते हैं:

export MY_VAR=[your value here]

जावा होम के साथ उदाहरण:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/current

इसे सहेजें और टर्मिनल पर लौटें।

आप इसे पुनः लोड कर सकते हैं:

source .profile

या अपने टर्मिनल विंडो को बंद करें और खोलें।


2

यहाँ खेलने के लिए दो प्रकार के गोले हैं।

  • हर बार जब आप बैश की नई प्रति शुरू करते हैं तो गैर-लॉगिन: .Bashrc पुनः लोड किया जाता है
  • लॉगिन: .profile केवल तभी लोड की जाती है जब आप या तो लॉगिन करते हैं, या स्पष्ट रूप से इसे लोड करने के लिए बैश को बताते हैं और इसे लॉगिन शेल के रूप में उपयोग करते हैं।

यहां यह समझना महत्वपूर्ण है कि बैश के साथ, फ़ाइल .bashrcको केवल एक शेल द्वारा पढ़ा जाता है जो इंटरैक्टिव और गैर-लॉगिन दोनों है, और आप पाएंगे कि लोग अक्सर इसमें लोड होते .bashrcहैं.bash_profile इस सीमा को पार करने के लिए।

अब जब आपके पास बुनियादी समझ है, तो आइए हम आपको इसे स्थापित करने के लिए कैसे सलाह देंगे।

  • .profile: इसे गैर-मौजूदा बनाएँ। वहां अपना PATH सेटअप लगाएं।
  • .bashrc: यदि गैर-मौजूद है तो बनाएं। अपने सभी उपनामों और कस्टम तरीकों को वहां रखें।
  • .bash_profile: यदि मौजूदा नहीं है तो बनाएं। निम्नलिखित को वहां रखें।

.bash_file:

#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc  # Get Aliases and Functions
#

2

शेल्स लॉगिन करें

/etc/profile

शेल पहले फाइल में कमांड को निष्पादित करता है /etc/profile। रूट विशेषाधिकारों के साथ काम करने वाला एक उपयोगकर्ता बैश चलाने वाले उपयोगकर्ताओं के लिए सिस्टमफुल डिफ़ॉल्ट विशेषताओं को स्थापित करने के लिए इस फाइल को सेट कर सकता है।

.bash_profile
.bash_login
.profile

अगले शेल के लिए लग रहा है ~/.bash_profile, ~/.bash_loginऔर ~/.profile(~ / अपने घर निर्देशिका के लिए कम हाथ है), उस क्रम में, इन फ़ाइलों में से पहली में कमांड को निष्पादित करता है जो इसे पाता है। आप इन फ़ाइलों में से एक में सेट डिफॉल्ट को ओवरराइड करने के लिए कमांड डाल सकते हैं /etc/profile। वर्चुअल टर्मिनल पर चलने वाला शेल इन फ़ाइलों में कमांड निष्पादित नहीं करता है।

.bash_logout

जब आप लॉग आउट करते हैं, तो bash कमांड को निष्पादित करता है ~/.bash_logout फ़ाइल । यह फ़ाइल अक्सर आदेशों को रखती है जो एक सत्र के बाद साफ करते हैं, जैसे कि अस्थायी फ़ाइलों को हटाने वाले।

इंटरएक्टिव नॉनग्लिन गोले

/etc/bashrc

हालांकि सीधे बैश द्वारा नहीं बुलाया जाता है, कई ~/.bashrcफाइलें कॉल करती हैं /etc/bashrc। यह सेटअप नॉन-बैगा गोले के लिए सिस्टमवाइड डिफ़ॉल्ट विशेषताओं को स्थापित करने के लिए रूट विशेषाधिकार के साथ काम करने वाले उपयोगकर्ता को अनुमति देता है।

.bashrc

एक इंटरैक्टिव नॉनगिलिन शेल ~/.bashrcफ़ाइल में कमांड निष्पादित करता है । आमतौर पर एक लॉगिन शेल के लिए एक स्टार्टअप फाइल, जैसे कि .bash_profile, इस फाइल को चलाता है, इसलिए लॉगिन और नॉनग्लिन शेल दोनों कमांड को चलाते हैं।.bashrc

क्योंकि .bashrcकई बार आदेशों का निष्पादन किया जा सकता है, और क्योंकि सबस्क्रिप्‍ट को निर्यात किए गए चर विरासत में मिलते हैं, इसलिए यह कमांड को .bash_profileफ़ाइल में मौजूदा चर जोड़ने के लिए एक अच्छा विचार है ।


2

आईओएस पर सभी जादू केवल sourceफ़ाइल के साथ उपयोग करने के साथ जाता है , जहां आप अपने पर्यावरण चर का निर्यात करते हैं।

उदाहरण के लिए:

आप इस तरह से एक फ़ाइल बना सकते हैं:

export bim=fooo
export bom=bar

इस फ़ाइल को इस रूप में सहेजें bimbom.env, और करें source ./bimbom.ev। Voilá, आपको अपने पर्यावरण चर मिले।

उनके साथ की जाँच करें:

echo $bim

1

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

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