किन परिस्थितियों में निष्पादन योग्य पहली बार पथ में उपयोग नहीं किया जाएगा


15

मैं रास्ते में एक निष्पादन योग्य की पहली घटना का उपयोग नहीं कर osx पर zsh (5.4.2_1 होमब्रेक के साथ स्थापित) के साथ कुछ अजीब व्यवहार कर रहा हूं।

यहाँ परिदृश्य है:

echo $PATH रिटर्न:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

काढ़ा दोनों में है

/usr/local/Cellar/zplug/HEAD-9fdb388/bin     

तथा

usr/local/bin/brew

यह पुष्टि की जाती है कि कौन- सा काढ़ा चल रहा है , जो रिटर्न करता है:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew   
/usr/local/bin/brew

लेकिन जब मैं चला जाता है जो इसे पीसा जाता है:

/usr/local/bin/brew

और काढ़ा/usr/local/bin/brew बजाय चलाता है/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

जब मार्ग में काढ़ा पहले हो तो यह कैसे हो सकता है?

मदद की सराहना की।


7
rehashऔर उन लोगों को फिर से चलाएं - अगर यह बाद में भी होता है, तो उसे संपादित करें
माइकल होमर

@ मिचेलहोमर: हाँ, यह एक है। यहां अनुभव करें।
यहोशू

जवाबों:


25

which -a cmdउन सभी नियमित फ़ाइलों को खोजता है cmdजिनके नाम पर आपने निर्देशिका में $path(उपनाम, फ़ंक्शंस, बिल्डिंस के अलावा ...) की अनुमति दी है।

जबकि which cmdवह आदेश लौटाएगा जो zsh( whichएक बिल्ट इन zshहै, tcshलेकिन अधिकांश अन्य गोले के विपरीत) है।

zsh, जैसे अधिकांश अन्य गोले एक hashतालिका में निष्पादकों के पथ को याद करते हैं, ताकि $pathजब आप उन्हें आमंत्रित करते हैं, तो सभी निर्देशिकाओं में उन्हें देखना न पड़े।

उस हैश तालिका ( $commandsसाहचर्य सरणी में उजागर zsh) को hashकमांड (मानक POSIX शेल कमांड) के साथ जोड़-तोड़ किया जा सकता है ।

यदि आपने brewकमांड (या which/type/whence brew, या कमांड पूरा होने का उपयोग किया है या ऐसा कुछ भी जो उस हैश / कैश को प्राइम किया गया हो) को जोड़ने से /usr/local/Cellar/zplug/HEAD-9fdb388/binपहले या उससे पहले /usr/local/Cellar/zplug/HEAD-9fdb388/binजोड़ा गया था $path, zshतो उसे अपना रास्ता याद रहेगा और उसे इस तरह संग्रहीत किया जाएगा $commands[brew]=/usr/local/bin/brew

उस स्थिति में, आप hash -r(बॉर्न शेल के रूप में) या rehash(जैसे ही csh में) याद किए गए कमांड को zsh भूल सकते हैं (उस कैश को अमान्य करें ), इसलिए इसे अगली बार देख सकते हैं और इसे नए स्थान पर पा सकते हैं।


धन्यवाद - इससे समस्या हल हो गई। क्या मुझे $ कमांड [काढ़ा] गूंजने में सक्षम होना चाहिए - मुझे कुछ नहीं दिख रहा है?
सात

1
@ कॉन्टिनम, सॉरी, मेरा बुरा, यह $commands, नहीं $command। संपादित देखें।
स्टीफन चेज़लस

0

/usr/local/bin/brew आमतौर पर एक प्रतीकात्मक लिंक है।

तो /usr/local/bin/brewऔर /usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

शायद वही फाइलें हैं।

प्रकार:

ls -al /usr/local/bin/brew

पुष्टि करने के लिए।

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