कमांड लाइन OS X पर PATH आदेश का सम्मान क्यों नहीं करती है?


2

मैंने एक ssh कमांड को अंदर जोड़ा ~/bin/sshऔर PATHअन्य पथों से पहले इसे शामिल करने के लिए संशोधित किया ।

जब मैं चलाऊंगा which sshतो वह इसका जवाब देगा ~/bin/sshलेकिन जब मैं दौड़ूंगा sshतो यह केवल /usr/bin/sshइसके बजाय निष्पादित करेगा ।

मेरे पास कोई उपनाम नहीं है ssh

क्या कारण है और मैं इसे कैसे ठीक कर सकता हूं?


मेरा ठीक उल्टा व्यवहार है। which tmuxसिस्टम-वाइड बाइनरी पथ दिखाता है, जिसमें एक साझा साझा लाइब्रेरी है और प्रारंभ नहीं हो सकता है। इस कारण से, मैंने अपने होम फोल्डर में फिक्स्ड शेयर्ड लाइब्रेरी रेफरेंस के साथ एक कॉपी जोड़ दी है और इसे अपने पथ पर जोड़ दिया है। whichअभी भी सिस्टम बाइनरी को typeसंदर्भित करता है, होम बाइनरी को संदर्भित करता है, और बस रनिंग होम बाइनरी को भी चलाता है। अजीब तरह से, which -a tmuxदो बायनेरिज़ को दिखाता है, लेकिन मेरे संबंध में रिवर्स ऑर्डर में $PATH
स्पाइडी

जवाबों:


4

उपयोग न करें which, उपयोग करें typewhichडिफ़ॉल्ट खोल (बैश) में आदेश एक बाहरी उपयोगिता जो उपनाम और कार्यों के बारे में पता नहीं है। दूसरी ओर, typeएक आंतरिक उपयोगिता है जो आपको बताएगी कि क्या इसका तर्क एक उपनाम, एक फ़ंक्शन, एक अंतर्निहित उपयोगिता या एक बाहरी कमांड है।

whichआदेश केवल ऐतिहासिक कारणों के लिए ट्यूटोरियल और मैनुअल में बताया गया है - 30 साल पहले typeआदेश हर जगह मौजूद नहीं था, और कुछ लोगों अनुकूल करने के लिए धीमी गति से किया गया है।

अधिक विवरणों के लिए, ऐतिहासिक और वर्तमान गोले की चर्चा सहित, देखें कि "कौन सा" क्यों नहीं उपयोग किया जाए? फिर क्या उपयोग करें?

$ type cp
cp is aliased to `cp -i'
$ type mkcd
mkcd is a function
mkcd ()
{
…
}
$ type type
type is a shell builtin
$ type cat
cat is /bin/cat

Zsh में, इसका उपयोग करना ठीक है which: zsh के पास typeऔर whichअंतर्निहित कमांड के रूप में दोनों हैं ।

यह भी ध्यान दें कि यदि आपने अभी कोई प्रोग्राम स्थापित या हटाया है, तो शेल ने अपने पुराने स्थान को याद कर लिया होगा। उदाहरण के लिए, यदि आपने किसी निर्देशिका में प्रोग्राम के अपने संस्करण को स्थापित किया है जो सिस्टम निर्देशिकाओं से आगे है $PATH, तो शेल उस प्रोग्राम को लागू करना जारी रख सकता है जो सिस्टम के साथ आया था। यह केवल गोले में एक मुद्दा है जो पहले से ही स्थापना या हटाने के समय चल रहा था। वर्तमान डेटा के साथ शेल की मेमोरी को रीफ्रेश करने के लिए, कमांड चलाएं hash -rया hash COMMANDNAME


0

गलती से हल हो गया, मेरा इस नाम के साथ bash_profile में एक समारोह था ...

इसका उपयोग करके पाया गया: सेट | grep ssh


यदि आप पाते हैं कि आप फ़ंक्शन को चारों ओर लपेटना चाहते हैं ssh, तो आपको संभवतः इसके बजाय एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करना चाहिए । आप होस्ट नाम, उपयोगकर्ता नाम और अन्य विकल्पों के लिए शॉर्टकट परिभाषित कर सकते हैं ~/.ssh/config
गिल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.