मुझे लगता है कि अपने .bash_profile
या .bashrc
अपने पथ पर .rbenv/shims
जोड़ रहा है, और कहा कि इससे पहले कि path_helper
खोल शुरू हुआ के दौरान शुरू हो जाती है कुछ बिंदु पर चल रहा है।
path_helper के लिए आदमी पृष्ठ खुल जाता है के साथ: यहां महत्वपूर्ण बिंदु
The path_helper utility reads the contents of the files in the directo-
ries /etc/paths.d and /etc/manpaths.d and appends their contents to the
PATH and MANPATH environment variables respectively.
कि path_helper उपयोगिता करने का इरादा है एक मौजूदा PATH
सेटिंग करने के लिए सामग्री जोड़ने के लिए, उन्हें बदलना नहीं है।
तो, (और वास्तविकता में, क्या यह वास्तव में करता है आगे जोड़ते सामग्री,, जो PATH
चर के लिए मायने रखती है उन्हें नहीं जोड़ी जा ...) अगर मैं अपने PATH
, सेटिंग उत्पन्न पर एक प्रवेश के साथ शुरू path_helper यह सुनिश्चित करेगा कि प्रविष्टि PATH
पर जारी रहती है।
% echo $SHELL
/bin/bash
% uname
Darwin
% /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH="" /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH=foo /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;
ध्यान दें कि foo
, अंतिम पंक्ति में मेरी पथ में शामिल किया गया यहां तक कि हालांकि /etc/paths
और /etc/paths.d/*
की सामग्री को नहीं बदला है।
उसी समय, path_helper उपयोगिता भी डुप्लिकेट प्रविष्टियों के साथ पथ बनाने के लिए पर सावधान नहीं लगती है; यह /etc/paths
और /etc/paths.d/*
और वर्तमान PATH
को संगत करने के बाद डुप्लिकेट प्रविष्टियों हटा देता है।
यह बाद का विवरण विशेष रूप से भ्रमित हो सकता है क्योंकि यह मूल PATH
सेटिंग (!) की तुलना में प्रवेश पुनरीक्षण का कारण बन सकता है।
नीचे इस व्यवहार के कुछ उदाहरण दिए गए हैं: पहला मामला एक डुप्लिकेट foo
हटाया जा रहा है। दूसरा और तीसरा मामला एंट्री रीडरिंग का वर्णन करता है: जेनरेटेड पीएटीएच दोनों मामलों में समान है, लेकिन तीसरे मामले में, /usr/bin
प्रविष्टि foo
और bar
के बीच PATH
के सामने से स्थानांतरित कर दी गई है। (यह डुप्लिकेट-एंट्री हटाने प्रविष्टियों के जोड़ों पर बस सरल स्ट्रिंग-मिलान पर आधारित प्रतीत होता है, जैसा कि नीचे चौथे मामले द्वारा चित्रित किया गया है जहां स्ट्रिंग /usr/bin/
foo/
और bar
के बीच बनी हुई है।)
% PATH=foo:foo /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;
% PATH=foo:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo:/usr/bin:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo/:/usr/bin/:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo/:/usr/bin/:bar"; export PATH;
अंत में, श्रेय देना जहाँ क्रेडिट कारण है: जबकि आदेश दृश्यों के सब से ऊपर अपने ही जांच का परिणाम है, मैं मूल रूप से path_helper
के व्यवहार की जांच के लिए प्रेरित किया गया था टिप्पणी here पढ़ने के बाद , जो इंगित करता है कि path_helper
पैरेंट प्रक्रिया द्वारा PATH
पर्यावरण चर सेट का पुन: उपयोग करता है।
यह इंगित करने के लिए धन्यवाद कि, दस्तावेज़ों का पालन करें, path_helper * पथ * प्रीपेन्ड करता है और डुप्लीकेट हटा देता है। – algal