क्या 'जो' के लिए बैश बिलिन है?


16

मैं एक न्यूनतम फेडोरा इंस्टॉल का परीक्षण कर रहा हूं। अजगर या नोड जैसे दुभाषियों के लिए पथ की जांच करने के लिए, मैं सामान्य रूप से उपयोग करता हूं which

मैं नोटिस whichडिफ़ॉल्ट रूप से स्थापित नहीं है। मैं पैकेज को जोड़ सकता हूं, लेकिन मुझे आश्चर्य है कि अगर कोई शेल बिल्डिन है जिसका उपयोग इस सामान्य कार्य को करने के लिए किया जा सकता है।

मैं बैश 4.2 का उपयोग कर रहा हूं।


1
किसी तरह विंडोज समकक्ष के लिए एक खोज मुझे यहाँ लाया; भविष्य के दर्शकों के लिए: "जहां" आपको दिए गए फ़ाइल का मार्ग बताएगा।
रबर डक

1
मैं इस Q पर आने वाले किसी व्यक्ति को भी इस U & L Q & A को पढ़ने के लिए प्रोत्साहित करता हूं। इसमें वह सब कुछ शामिल है जिसके बारे में आप कभी जानना चाहते थे whichक्यों नहीं "जो" का उपयोग करें? तब क्या उपयोग करें?
स्लम

जवाबों:


26

आप उपयोग कर सकते हैं type, जो एक बैश बिलिन है:

$ type -P which
which is /usr/bin/which

प्रलेखन के लिए, देखें help [t]ype, जो मैन पेज typeमें अनुभाग को संदर्भित करता है bash

( दो बिल्डरों केhelp type लिए मदद पृष्ठों को प्रिंट करता है जो स्ट्रिंग "प्रकार" से शुरू होते हैं , जिनमें से एक अप्रचलित है और इसके लिए पूरी तरह से असंबद्ध है।)


3
मैं type -aखुद को पसंद करता हूं। कोष्ठक में क्यों [t]ype?
ग्लेन जैकमैन

type -aउन सभी चीजों को प्रिंट करेगा जो तर्क इंगित करता है, और न कि इसे टाइप करते समय क्या निष्पादित किया जाएगा।
l0b0

2
मैं इस Q पर आने वाले किसी व्यक्ति को भी इस U & L Q & A को पढ़ने के लिए प्रोत्साहित करता हूं। इसमें वह सब कुछ शामिल है जिसके बारे में आप कभी जानना चाहते थे whichक्यों नहीं "जो" का उपयोग करें? तब क्या उपयोग करें?
स्लम

की सूची में पहली बात type -aयह है कि यह क्या निष्पादित करेगा। मैं ग्लेन के समान ही करता हूं और हमेशा उपयोग करता हूं type -a
स्लम

1
type -pअगर रास्ता एक उपनाम है तो रास्ता नहीं दिखाता। type -Pहमेशा कमांड पथ को ठीक से दिखाता है। मुझे लगता है। हमें स्वीकार किए गए उत्तर को type -P@ l0b0
dirigeant

10

आप उपयोग कर सकते हैं typeया command -v। का आउटपुट typeमानव पठनीय है; के उत्पादन command -vबैश द्वारा निष्पादित किया जा सकता है।

ध्यान दें कि वे वास्तव में थोड़ा अलग हैं। typeऔर commandकमांड के हैशेड मूल्य को देखें। यह कहना है, यदि आप टाइप करते हैं cmd, type cmdया command -v cmdआपको बताएंगे कि वास्तव में क्या चलाया जाएगा। वे उपनाम, बैश फ़ंक्शंस, और बैश बिल्डिंस पर भी काम करते हैं (हालांकि type -pइन पर ध्यान नहीं देंगे और केवल सच्ची फाइलें वापस करेंगे)।

whichबस पथ पर एक खोज करता है। यह अलग है क्योंकि:

  • यदि समान नाम के साथ कोई अन्य नाम, फ़ंक्शन या बिलिन है, तो उसे इसके बजाय कहा जाएगा।
  • यदि पिछले हैशेड के बाद से PATH में पहले कोई कमांड जोड़ी गई थी, तो वह इसके द्वारा मिल जाएगी which, लेकिन उस कमांड को निष्पादित करने से हैश वैल्यू का उपयोग होगा (आप बैश में हैश को अपडेट करने के लिए बाध्य कर सकते हैं hash -r)।

आमतौर पर लोग वास्तव में चाहते हैं type, न कि whichकम से कम संवादात्मक उपयोग के लिए, क्योंकि वे इसका उपयोग यह जानने के लिए करते हैं कि "जब मैं इसे कर रहा हूं तो यह कमांड कहां से आ रही है?" आपको केवल तभी उपयोग करना चाहिए whichजब आप वास्तव में एक PATH लुकअप करना चाहते हैं।


command -vके बराबर है ksh whence
हेंक लैंगवेल्ड

1
तो हमारे पास है where, whenceऔर निश्चित रूप से भी who, whyऔर when? क्यों नहीं है what?
हेगन वॉन एटजेन

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
इवान वुज़िका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.