क्या पैठ चर को "सॉर्ट" करता है?


11

मैं एक प्रतिलिपि प्रस्तुत करने योग्य समस्या है:

  1. बैश में मेरा पैथ सेट करें
  2. शुरू tmux द्वारा tmux, tmux attachया किसी भी प्रकार
  3. $ PATH की प्रतिध्वनि करें और इसे समान घटकों के साथ देखें लेकिन अलग-अलग क्रम में

इसे कैसे रोका जाए? इसे क्या समझाता है?

जवाबों:


26

यदि आप एक मैक पर हैं और सोच रहे हैं कि /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/binजब आप tmux चलाते हैं, तो PATH के लिए पूर्वनिर्धारित क्यों रहता है, यह पथ_हेलर नामक एक उपयोगिता के कारण है जो आपकी /etc/profileफ़ाइल से चलाया जाता है ।

आप आसानी से tmux (या यों कहें, bash) को स्रोत के लिए नहीं मना सकते /etc/profile(किसी कारण से tmux हमेशा एक लॉगिन शेल के रूप में चलता है, जिसका अर्थ है / etc / प्रोफ़ाइल पढ़ी जाएगी), लेकिन आप यह सुनिश्चित कर सकते हैं कि path_helter डॉन के प्रभाव अपने पेट के साथ पेंच।

चाल यह सुनिश्चित करने के लिए है कि पथ_हेलपर चलने से पहले पथ खाली है। मेरी ~/.bash_profileफ़ाइल में मेरे पास यह है:

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

Path_helper के क्रियान्वयन से पहले PATH को साफ़ करने से यह आपके (पहले) चुने गए PATH को डिफ़ॉल्ट PATH को तैयार करने से रोकेगा, और आपके बाकी व्यक्तिगत बैश सेटअप स्क्रिप्ट्स (आगे नीचे .bash_profile, या .bashrcयदि आपने इसे खट्टा किया है .bash_profile) से सेटअप करने की अनुमति देगा तदनुसार पाथे।

आशा है कि समझ में आता है ...


1
यह पूरी तरह से मेरे लिए यह किया! मैंने इसे if [ -n "$TMUX" ]स्वयं एक खंड के पीछे छिपाया है , लेकिन मैं सोच रहा था - [ -f /etc/profile ]वास्तव में कितना महत्वपूर्ण है ? क्या यह मान लेना सुरक्षित नहीं है कि /etc/profileहमेशा एक नियमित फ़ाइल होती है?
रयान लू

1
@RyanLue आप आराम से जगह ले सकता है -fके साथ -eहै, लेकिन मैं व्यक्तिगत रूप से कोशिश करते हैं और एक स्क्रिप्ट है कि चलाने हो जाता है जब मैं के लिए लॉग इन जब तक कि मैं जाँच की थी यह नहीं था से एक फ़ाइल स्रोत नहीं होता। मैं हालांकि विभिन्न मशीनों (और ऑपरेटिंग सिस्टम) के बहुत सारे पर अपनी बैश स्क्रिप्ट का फिर से उपयोग करने के लिए करता हूं, इसलिए मुझे यह सुनिश्चित करना पसंद है कि वे बुलेट प्रूफ हैं। मैं कल्पना कर सकता हूं कि कुछ अन्य यूनिक्स संस्करण इसे कुछ और कह सकते हैं।
ग्राहम एश्टन

5

नहीं; छँटाई $PATHकरना एक बहुत ही पागल काम होगा, क्योंकि कई सिस्टम इसके उपयोगकर्ता-सेट आदेश पर निर्भर करते हैं।

हालाँकि, tmux आपके शेल को "लॉगिन" मोड में शुरू करता है, जिससे फिर से~/.profile खटास आ जाती है । इसका मतलब है कि अगर आपके पास उस फ़ाइल में कुछ है , तो इसे फिर से किया जाएगा , जिसके परिणामस्वरूप $ PATH शामिल होगा । इससे बचने के लिए, आप दूसरे चर का उपयोग कर सकते हैं:PATH=/my/dir:/another/dir:$PATH/my/dir:/another/dir:/my/dir:/another/dir:(etc.)

if [ "$_SKIP_PROFILE" ]; then
    return 0
else
    export _SKIP_PROFILE=y
fi

export PATH="/my/dir:/another/dir:$PATH"

0

@ ग्राहम एश्टन आपके विचार के लिए धन्यवाद

मेरा सुझाव यह होगा कि आप डालें

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

इसके शीर्ष पर आपकी .zshrc फ़ाइल है।

यह सुनिश्चित करें कि आपकी

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

नीचे है।

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