कहाँ राशि में $ PATH चर मुखर जगह के लिए?


110

मैं प्यार करता हूं zsh, लेकिन मुझे यकीन नहीं है कि मुझे $PATHऔर अन्य चर के स्थान पर कहां रखना है ? मुझे लगता है कि वे फ़ाइलों के बीच बिखरे हुए हैं .zshrc .zprofile .bashrc .bash_profile, और कभी-कभी दोगुनी हो जाती हैं।

मुझे लगता है कि अंदर कुछ भी होने bashफ़ाइलें बहुत भावना के रूप में उपयोग किया जा रहा देखकर नहीं है zsh, लेकिन जहां वास्तव में मैं अपने रखकर किया जाना चाहिए rvm, python, nodeमेरे लिए आदि जोड़ $PATH?

क्या कोई विशिष्ट फ़ाइल है .zshenvजिसका मुझे उपयोग करना चाहिए (यानी जो वर्तमान में मेरी स्थापना में मौजूद नहीं है ), उनमें से एक जिसका मैं वर्तमान में उपयोग कर रहा हूं, या क्या यह भी मायने रखता है?

जवाबों:


148

tl; डॉस वर्जन: उपयोग ~/.zshrc

और बीच के अंतर को समझने के लिए मैन पेज पढ़ें :

~/.zshrc, ~/.zshenvऔर ~/.zprofile


मेरी टिप्पणी के बारे में

उत्तर केव से जुड़ी मेरी टिप्पणी में , मैंने कहा:

यह गलत प्रतीत होता है - / / / प्रोफाइल किसी भी zsh प्रलेखन में सूचीबद्ध नहीं है जो मैं पा सकता हूं।

यह आंशिक रूप से गलत हो जाता है: द्वारा खट्टा किया /etc/profile जा सकता है zshहालाँकि , यह केवल तब होता है जब zsh"के रूप में लागू किया जाता है shया ksh"; इन संगतता मोड में:

सामान्य zsh स्टार्टअप / शटडाउन स्क्रिप्ट निष्पादित नहीं की जाती हैं। लॉगिन गोले स्रोत / आदि / प्रोफाइल $ HOME / .profile द्वारा पीछा किया। यदि ENV पर्यावरण चर को मंगलाचरण पर सेट किया जाता है, तो प्रोफ़ाइल स्क्रिप्ट के बाद $ ENV को स्रोत बनाया जाता है। ENV का मान एक पैमाना के रूप में व्याख्या किए जाने से पहले पैरामीटर विस्तार, कमांड प्रतिस्थापन और अंकगणितीय विस्तार के अधीन है। [ मैन जश, "कम्पेटिबिलिटी" ]।

ArchWiki ZSH लिंक का कहना है:

लॉगिन पर, Zsh इस क्रम में निम्नलिखित फाइलों का स्रोत:
/ etc / प्रोफाइल
यह फ़ाइल लॉगिन पर सभी बॉर्न-संगत गोले द्वारा sourced है।

यह implys कि /etc/profileहै हमेशा पढ़ने के द्वारा zshप्रवेश पर - मैं आर्क लिनक्स परियोजना के साथ किसी भी अनुभव नहीं मिला है; विकी उस वितरण के लिए सही हो सकता है, लेकिन यह आम तौर पर सही नहीं है। जानकारी zsh मैनुअल पृष्ठों की तुलना में गलत है, और OS X पर zsh पर लागू नहीं होती है ( $PATHसेट में पथ /etc/profileमेरे zsh सत्रों के लिए इसे नहीं बनाते हैं)।



प्रश्न का समाधान करने के लिए:

मुझे वास्तव में अपने $ PATH के लिए अपना आरवीएम, अजगर, नोड आदि कहां रखना चाहिए?

आम तौर पर, मैं अपने निर्यात होगा $PATHसे ~/.zshrcहै, लेकिन यह की कीमत का एक पढ़ा होने zshall आदमी पेज, विशेष रूप से "स्टार्टअप / बंद फ़ाइलें" खंड - ~/.zshrcके लिए पढ़ने के लिए है इंटरैक्टिव गोले, जो या आपकी आवश्यकताओं के अनुरूप नहीं हो सकता है - अगर आप चाहते हैं $PATHके लिए zshआपके द्वारा आहूत किया गया प्रत्येक शेल (दोनों interactiveऔर नहीं, दोनों loginऔर नहीं, आदि), तो ~/.zshenvएक बेहतर विकल्प है।

क्या कोई विशिष्ट फ़ाइल है जिसका मैं उपयोग कर रहा हूं (यानी .zshenv जो वर्तमान में मेरे इंस्टॉलेशन में मौजूद नहीं है), उनमें से एक जिसे मैं वर्तमान में उपयोग कर रहा हूं, या क्या यह भी मायने रखता है?

स्टार्टअप पर पढ़ी गई फ़ाइलों का एक गुच्छा है (लिंक किए गए manपृष्ठों की जांच करें ), और उसके लिए एक कारण है - प्रत्येक फ़ाइल में यह विशेष स्थान है (प्रत्येक उपयोगकर्ता के लिए सेटिंग्स, उपयोगकर्ता-विशिष्ट के लिए सेटिंग्स, लॉगिन गोले के लिए सेटिंग्स, हर शेल के लिए सेटिंग्स,) आदि)। मौजूदा के
बारे में चिंता न करें ~/.zshenv- यदि आपको इसकी आवश्यकता है, तो इसे बनाएं, और इसे पढ़ा जाएगा।

.bashrcऔर .bash_profileकर रहे हैं नहीं द्वारा पढ़ा zsh, जब तक आप स्पष्ट रूप से उन्हें स्रोत ~/.zshrcया इसी तरह की; के बीच वाक्य रचना bashऔर zshहै नहीं हमेशा संगत। दोनों .bashrcऔर .bash_profileके लिए तैयार कर रहे हैं bashसेटिंग्स, नहीं zshसेटिंग्स।


3
पूरी तरह से जवाब देने के लिए धन्यवाद। अजीब है कि आप कहते हैं .bashrcऔर .bash_profileके द्वारा पढ़ा नहीं कर रहे हैं zshके रूप में मैं वर्तमान में मेरे है rvmके अलावा $PATHमें .bashrc, और मेरे pythonमें इसके अलावा .bash_profile, और दोनों ठीक जोड़े जा रहे हैं। किसी भी मामले में, मैं अपने सभी $PATHनिर्यातों को स्थानांतरित करने जा रहा हूं ~/.zshrcक्योंकि मेरे सभी अन्य zshकॉन्फ़िगरेशन वहां रखे गए हैं। मुझे स्वीकार करना होगा, मैं विभिन्न प्रकार के गोले से परिचित नहीं हूं। आपके द्वारा पोस्ट किए गए लिंक को पढ़ने से, मैं अनुमान लगा रहा हूं कि मैं एक इंटरैक्टिव शेल का उपयोग करता हूं, लेकिन मैं आगे पढ़ने के लिए सुनिश्चित हो जाएगा ... फिर से धन्यवाद!
स्टीफमिकेल

30

यहां STARTU / SHUTDOWN FILES अनुभाग के अंतर्गत zsh मैन पेज से डॉक्स दिए गए हैं।

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
   shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
   shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

इसमें से हम देख सकते हैं कि ऑर्डर की गई फाइलें हैं:

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

आप यहाँ अधिक जानकारी प्राप्त कर सकते हैं


18

मुझे भी इसी तरह की समस्या थी (bash टर्मिनल कमांड सही तरीके से काम कर रहा था लेकिन zsh ने कमांड को त्रुटि नहीं मिली दिखाया)

उपाय:


बस जो भी आप पहले पेस्ट कर रहे थे उसे पेस्ट करें ~ / .bashrc:

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