कार्यक्रमों की सूची में सूचीबद्ध


1

Bash (या किसी अन्य शेल) में, जब आप "फ़ायरफ़ॉक्स" या कोई अन्य कमांड टाइप करते हैं, तो bash इसे उसके वास्तविक स्थान (/ usr / bin / फ़ायरफ़ॉक्स) पर कैसे इंगित करता है? इसके अलावा, बैश स्वतः पूर्ण के लिए "कैटलॉग" कहां है?

जवाबों:


1

एक $PATHवैरिएबल है जो कमांड नामों के लिए लुकअप करने के लिए सभी पथ (कोलोन-अलग) रखता है। उन फ़ोल्डरों को पहले एक से अंतिम एक तक जांचा जाता है और पाए जाने पर कमांड निष्पादित की जाती है (इसलिए यदि विभिन्न $PATHनिर्देशिकाओं में उस नाम की कई फाइलें हैं , तो पहले वाले को निष्पादित किया जाएगा)।

देखने के लिए $PATH:

echo $PATH

जाँच करने के लिए कि कहाँ firefoxहै:

which firefox

यदि ऐसा होता है कि एक ही नाम के साथ कमांड हैं, लेकिन विभिन्न फ़ोल्डर्स (दोनों में $PATH), तो आप उन which -a firefoxसभी को सूचीबद्ध करने के लिए उपयोग कर सकते हैं। निष्पादन पर, शेल पहले वाले को चुनता है।
20

तो कोई व्यक्ति $ पथ में किसी प्रोग्राम को कैसे जोड़ेगा या क्या मैं इसे गलत तरीके से समझ रहा हूं? इसके अलावा, क्या कोई वास्तविक फ़ाइल है?
एग्ज

जब आप कोई आदेश जारी करते हैं तो $ PATH फ़ोल्डर दिखाई देते हैं। जब फ़ाइल मिल जाती है, तो इसे निष्पादित किया जाता है। एक नया कमांड बनाने के लिए, किसी भी पथ-एड डायरेक्टरी में उस नाम की एक निष्पादन योग्य फ़ाइल जोड़ें। आप उस फ़ाइल के साथ एक नई dir भी बना सकते हैं और dir को $ PATH में जोड़ सकते हैं।
ग्रोनोस्तज


1

अन्य उत्तरों में पहले से ही आवश्यक दिए गए हैं। तकनीकी रूप से, शेल एक हैश तालिका में एक कमांड का स्थान संग्रहीत करता है। में bashआप आदेश द्वारा इस तालिका देख सकते हैं hash:

$ hash
hits    command
   2    /usr/bin/ldd
   1    /usr/bin/man
   1    /usr/bin/less

आप इस हैश तालिका को भी संशोधित कर सकते हैं, विवरण के लिए मैं bashआदमी पृष्ठ को उद्धृत करता हूं :

hash [-lr] [-p filename] [-dt] [name]

प्रत्येक नाम के लिए, कमांड का पूरा फ़ाइल नाम $ PATH में निर्देशिकाओं को खोजकर और याद करके निर्धारित किया जाता है। यदि -p विकल्प की आपूर्ति की जाती है, तो कोई पथ खोज नहीं की जाती है, और फ़ाइलनाम का उपयोग कमांड के पूर्ण फ़ाइल नाम के रूप में किया जाता है। -R विकल्प शेल को सभी याद किए गए स्थानों को भूलने का कारण बनता है। -D विकल्प शेल को प्रत्येक नाम के याद किए गए स्थान को भूलने का कारण बनता है। यदि -t विकल्प की आपूर्ति की जाती है, तो पूर्ण पथनाम जिसे प्रत्येक नाम से मेल खाती है मुद्रित किया जाता है। यदि -t के साथ कई नाम तर्क दिए गए हैं, तो नाम हैशेड पूर्ण पथनाम से पहले मुद्रित किया जाता है। -L विकल्प आउटपुट को एक प्रारूप में प्रदर्शित करने का कारण बनता है जिसे इनपुट के रूप में पुन: उपयोग किया जा सकता है। यदि कोई तर्क नहीं दिया जाता है, या यदि केवल -l आपूर्ति की जाती है, याद किए गए आदेशों के बारे में जानकारी मुद्रित की जाती है। रिटर्न स्टेटस तब तक सही है जब तक कि कोई नाम नहीं मिलता है या एक अवैध विकल्प की आपूर्ति नहीं की जाती है। यहां आप देख सकते हैं, जो आपको इस सत्र में पहले ही निष्पादित कर चुका है।

अन्य गोले अलग तरीके से व्यवहार कर सकते हैं, zsh(और मुझे लगता है कि यह से अनुकूलित किया गया था csh) खोल स्टार्टअप पर या कमांड द्वारा सभी आदेश एकत्र करता है rehash। तब आपको सभी उपलब्ध आदेशों की पूरी सूची मिलती है hashऔर आप निम्न सभी प्रकार के लिए खोज सकते हैं diff:

zsh$ hash | grep diff
bzdiff=/usr/bin/bzdiff
cdiff=/usr/bin/cdiff
colordiff=/usr/bin/colordiff
diff=/usr/bin/diff
diff3=/usr/bin/diff3
ptardiff=/usr/bin/ptardiff
sdiff=/usr/bin/sdiff
tkdiff=/usr/bin/tkdiff
vimdiff=/usr/bin/vimdiff
xzdiff=/usr/bin/xzdiff
zdiff=/usr/bin/zdiff

फिर से, man zshbuiltinsअधिक जानकारी के लिए परामर्श करें।


0
  1. बैश $PATHशब्द द्वारा कार्यक्रमों को देखने के लिए पर्यावरण चर का उपयोग करता है । रास्ते अलग हो जाते हैं :। आपकी $PATHसबसे अधिक संभावना है कि कुछ ऐसा है :/usr/bin:/usr/games:/usr/local/bin:/usr/local/games:, इसलिए वह इसे अंदर पाता है /usr/local/bin। अपना बदलें $PATHऔर पुनः प्रयास करें।
  2. आप completeबिलिन के माध्यम से टैब पूर्ण व्यवहार बदल सकते हैं । "प्रोग्राम कम्पलीट" देखें man bash
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.