जब मैं ZSH का उपयोग करता हूं, तो मैं /etc/profile.d में PATH कैसे सेट करूं?


22

मैं zshअपने शेल के रूप में उपयोग कर रहा हूं , और मैं अपने पर्यावरण को कॉन्फ़िगर करने की कोशिश कर रहा हूं।

मैं आमतौर पर $JAVA_HOMEएक फ़ाइल बनाकर अपने वेरिएबल को परिभाषित करता हूं :

/etc/profile.d/java.sh

निम्नलिखित सामग्री के साथ

export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH

फिर मैं लॉगआउट करता हूं और वापस आता हूं, और यह सब काम करता है, लेकिन किसी कारण से PATHचर सेट नहीं होता है। यह पहचानता है JAVA_HOME, लेकिन नया नहीं PATH, इस टर्मिनल स्निपेट को देखें:

~  echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_05
~  echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

और मैंने jvm कमांड फॉर्म को चलाने की कोशिश करके इसकी पुष्टि की

~  java -version
zsh: command not found: java

PATHशामिल नहीं है $JAVA_HOMEके रूप में यह होना चाहिए। क्या मुझे जाँच करनी चाहिए?

मैंने जाँच की है कि अगर मैं दौड़ता हूँ:

source /etc/profile.d/java.sh

यह सब सही ढंग से चलता है और मेरे चर सेट हो जाते हैं जैसा कि उन्हें होना चाहिए, लेकिन क्या स्क्रिप्ट को /etc/profile.dस्वचालित रूप से नहीं चलना चाहिए ?


क्या आपने ~/.profileइसके बजाय चर को संपादित करने और रखने की कोशिश की है ? हो सकता है कि इसमें PATHकहीं और लिखा जा रहा हो /etc/profile.d/
saiarcot895

जवाबों:


27

मेरे दृष्टिकोण से, ~/.zshrcफ़ाइल पर निम्न पंक्तियों को जोड़ने का सबसे अच्छा तरीका है (यदि आपके पास पहले से नहीं है, तो इसे बनाएं):

if [ -d "/path/to/jdk" ] ; then
    export PATH="/path/to/jdk/bin:$PATH"
fi

फिर अपने को पुनरारंभ करें zsh, या बस चलाएं source ~/.zshrcऔर फिर आपका पेट बिल्कुल आपकी इच्छानुसार होना चाहिए।

या, यदि आप परिवर्तन को सिस्टम-वाइड करना चाहते हैं, तो पिछले कोड को /etc/zsh/zshenvफ़ाइल के अंत में जोड़ें ।

लेकिन किसी भी स्थिति /etc/profile.dमें स्क्रिप्ट को स्वचालित रूप से चलाने के लिए उपयोग नहीं करते हैं zsh। यह निर्देशिका केवल bashशेल के लिए उपयोगी है , न zshकि आपके मामले में। इसे समझने के लिए, /etc/profileफ़ाइल खोलें , जो बैश इनिशियलाइज़ेशन फ़ाइल है और किसी भी स्थिति में zsh इनिशियलाइज़ेशन फ़ाइल नहीं है , और आप फ़ाइल के अंत में कहीं देखेंगे:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

इसलिए, /etc/profile.dनिर्देशिका से आपकी स्क्रिप्ट स्वचालित रूप से zshकेवल तभी चलेंगी जब आप पिछले कोड को एक zsh आरंभीकरण फ़ाइल में जोड़ते हैं, जैसे /etc/zsh/zprofileउदाहरण के लिए, या फ़ाइल /etc/profileमें स्रोत /etc/zsh/zprofile


4
शायद ~/.zprofileइससे बेहतर हो सकता है ~/.zshrc
मूरू

3

मुझे लगता है कि सब कुछ एक .zshenvफ़ाइल में जल्दी से प्रबंधित करना मुश्किल हो जाता है। मैं ओह-माय-श को स्थापित करने और फिर .oh-my-sh/custom/अलग-अलग .zshफ़ाइलों के रूप में निर्देशिका में विभिन्न अनुकूलन (एनवी संस्करण, फ़ंक्शन) रखने की सलाह देता हूं ।

मुझे यह भी पता चला कि यह दृष्टिकोण मशीन में ssh'ing के समय त्रुटिपूर्ण रूप से काम करता है जब env वैरिएबल को संशोधित करता है जैसे कि PATH। इसके अलावा यह कस्टमाइज़ेशन बैकअप और सिंक में बनाए रखने के लिए vcsh के साथ वास्तव में अच्छा काम करता है ।


ओह माई ज़श फ्रेमवर्क का उपयोग करते हुए, आप ssh एक्सेस के लिए उपयोग करने के लिए एक आईपी एड्रेस (रिमोट सर्वर) के साथ एक वैरिएबल कहाँ लगाएंगे? मुझे सर्वर के लिए git और लॉगिन स्क्रिप्ट के लिए ip की आवश्यकता है।
तिमो

1
हम्म। बिल्कुल यकीन नहीं है कि आप क्या मतलब है। मैं आईपी पते और उपयोगकर्ता नाम जैसे ssh~/.ssh/config
DVim

मैं व्यक्तिगत रूप से स्वीकृत उत्तर के लिए इस दृष्टिकोण को पसंद करता हूं क्योंकि मुझे vcsh का उपयोग करने का लाभ पसंद है और ZSH के लिए "कस्टम" फ़ोल्डर इस तरह से सामान के लिए एक आदर्श स्थान है।
एरिक ब्राउन

1

जब JAVA_HOMEसे सेट किया गया है, आपने पुष्टि की है कि उन लिपियों को स्वचालित रूप से खट्टा किया गया है, क्या आपने नहीं?

केवल तार्किक व्याख्या है जो PATHकिसी भी तरह बाद में सेट की गई है। इसे मूल रूप से PAM द्वारा सेट किया जाना चाहिए जो पढ़ता है /etc/environment, और जहाँ तक मुझे पता है कि /etc/profile.d/*.shफ़ाइलों के स्रोत से पहले होता है । संभवतः zsh उस संबंध में मारपीट की तुलना में अलग काम करता है।


0

अद्यतन चलाने के बाद स्थानीय स्तर पर बस इस मुद्दे में भाग गया। ऐसा लगता है कि मूल मुद्दा Drush है जिसमें पता नहीं है कि php की एक कानूनी प्रति कहां मिलती है जिसमें pdo शामिल है। सौभाग्य से यह एक पर्यावरण चर में इस पथ को नष्ट करने का समर्थन करता है, इसलिए मैंने कमांडलाइन पर यह किया:

export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"

इस मुद्दे को तय किया इसलिए मैंने संपादित किया .zshrc और उस फ़ाइल में जोड़ा, समस्या हल हो गई।


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