मैं हर जगह से किसी प्रोग्राम को कैसे निष्पादित कर सकता हूं


75

यदि मैं अपनी वर्तमान निर्देशिका की परवाह किए बिना दिए गए कार्यक्रम को चलाने में सक्षम होना चाहता हूं तो मुझे क्या करना चाहिए? क्या मुझे /binफ़ोल्डर में प्रोग्राम का प्रतीकात्मक लिंक बनाना चाहिए ?


5
नहीं, आपको शेल के पैट चर का उपयोग करना चाहिए।
msw

7
मुझे लगता है कि एक व्यक्तिगत ~/bin/फ़ोल्डर बनाना ठीक रहेगा , अपने पथ में जोड़ें, और उस फ़ोल्डर में सिमिलिंक बनाएं, जिसे आप कहीं से भी निष्पादित करना चाहते हैं।
frabjous

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

जवाबों:


53

यदि आप केवल export PATH=$PATH:</path/to/file>कमांड लाइन पर टाइप करते हैं तो यह केवल सत्र की लंबाई तक चलेगा।

यदि आप इसे स्थायी रूप से बदलना चाहते हैं तो export PATH=$PATH:</path/to/file>अपनी ~ / .bashrc फ़ाइल में जोड़ें (बस अंत ठीक है)।


11
धन्यवाद यह काम करता है। मेरे जैसे नए लोगों के लिए, कोण कोष्ठक को छोड़ना याद रखें <>। जैसे: $ पाथ: / आपकी / फाइल / पथ
एसएएम

4
साथ ही पथ में प्रोग्राम फ़ाइल नाम को शामिल न करें।
ओली निमितालियो

23

संक्षिप्त उत्तर यह है कि कार्यक्रम को चलाने के लिए, चाहे आपकी निर्देशिका कैसी भी हो, आपको अपने खोज पथ में कार्यक्रम की निर्देशिका होनी चाहिए। प्रोग्राम को उस रास्ते में पहले से ही एक फ़ोल्डर में डालकर या पथ पर एक नया फ़ोल्डर जोड़कर समस्या को हल किया जा सकता है - या तो काम करेगा। सबसे अच्छा जवाब इस पर निर्भर करता है:

क्या यह प्रोग्राम एक डाउनलोड किया गया प्रोग्राम है जिसे आपने स्वयं स्रोत से संकलित किया है?

इसकी काफी संभावना पहले से ही एक स्थापित तंत्र होगा। उस फ़ोल्डर में जिसे आपने प्रोग्राम संकलित किया है, रूट के रूप में, 'मेक इनस्टॉल' चलाएं

क्या यह प्रोग्राम एक डाउनलोड किया गया प्रोग्राम है जिसे आप कंप्यूटर पर मानक कार्यक्रमों के हिस्से के रूप में उपलब्ध कराना चाहते हैं?

इस तरह के एप्लिकेशन को एक मानक फ़ोल्डर में डालने के लिए समझ में आता है। इस तरह के कार्यक्रमों के लिए / usr / स्थानीय / बिन जैसे निर्देशिकाओं का उपयोग करने के लिए यह काफी आम है। ऐसा करने के लिए आपको रूट एक्सेस की आवश्यकता होगी।

यह एक प्रोग्राम है जो आपने अपने लिए लिखा है और / या आपके पास कंप्यूटर पर कोई विशेष निजीकरण नहीं है।

अपने घर निर्देशिका में एक फ़ोल्डर बनाना, जिसे 'बिन' कहा जाता है, और प्रोग्राम को वहां रखा जाता है। आपको इस फ़ोल्डर में पूर्ण पथ जोड़ने के लिए अपनी लॉगिन स्क्रिप्ट को संपादित करने की आवश्यकता हो सकती है (जैसे / usr / होम / जेरेमी / बिन)

जब तक आप अपनी वर्तमान निर्देशिका को खोज पथ में जोड़ सकते हैं, आपको हर नए कार्यक्रम के साथ ऐसा करते रहना होगा - और लंबी अवधि में अधिक काम करना होगा।


15

/binनिर्देशिका में फ़ाइल के लिए लिंक रखना कई कारणों से सबसे अच्छी बात नहीं है।

  • यदि वास्तविक निष्पादन योग्य फ़ाइल उस स्थान पर है जिसे कुछ उपयोगकर्ता देख या निष्पादित नहीं कर सकते, तो वे इसे एक खराब लिंक या दुष्क्रिया कार्यक्रम के रूप में देखते हैं।
  • /binनिर्देशिका जो सिस्टम चला रहे के लिए आवश्यक हैं प्रोग्राम (जैसी चीजों के लिए आरक्षित किया जाना माना जाता है chmod, mkdir, आदि)।

आप वास्तव में /usr/bin/या यहां तक कि निष्पादन योग्य फ़ाइल को स्थापित कर सकते हैं /usr/local/bin/। बेशक, आपने मैन्युअल रूप से उस बिंदु पर कार्यक्रम स्थापित किया है; आपका वितरण इसे ट्रैक रखने के लिए नहीं है जिस तरह से यह आपके बाकी कार्यक्रमों को करता है - आपको आवश्यक होने पर इसे मैन्युअल रूप से अपग्रेड करना होगा और यदि आप चाहते हैं तो इसे मैन्युअल रूप से हटा दें। इसके अलावा, आपको यह जानना होगा कि यह किस पैकेज पर निर्भर करता है (ऐसा लगता है कि आप पहले से ही प्रोग्राम का उपयोग करते हैं, इसलिए इसका ध्यान रखा जाता है, लेकिन सामान्य रूप से ...)।

जब तक मैं एक ऐसा प्रोग्राम स्थापित नहीं कर रहा हूँ, जिसकी मैं अन्य उपयोगकर्ताओं से अपेक्षा करता हूं, कि मैं आमतौर पर ऐसा नहीं करता: मैं अपने होम डायरेक्टरी में सिर्फ मेरे लिए एक बिन निर्देशिका बनाता हूं, और मैं ~/bin/अपने PATHपर्यावरण चर में जोड़ने के लिए अपने शेल प्रोफाइल को संपादित करता हूं । मुझे उन कार्यक्रमों का ट्रैक रखना आसान लगता है जो मैंने उस तरह से स्थापित किए हैं, क्योंकि यह बाकी सिस्टम से अलग है।


6

यदि आप fooउस निर्देशिका में एक कमांड चलाना चाहते हैं जो आपका शेल वर्तमान में है, तो आपके पास मूल रूप से दो विकल्प हैं:

  1. ./fooशेल प्रॉम्प्ट पर टाइप करें ।

  2. पर्यावरण चर के लिए .निर्देशिका ( ."वर्तमान निर्देशिका" के लिए एक नाम है) जोड़ें PATH; आप यह कैसे करते हैं यह उस शेल पर निर्भर करता है जिसका आप उपयोग कर रहे हैं:

    • बॉर्न-प्रकार के गोले (बैश, zsh, ksh, आदि) के लिए आप लिखते हैं ( अधिक जानकारी के लिए यह पृष्ठ देखें):

      export PATH=$PATH:.
      
    • csh-type गोले (tsh, csh) के लिए आप लिखते हैं ( अधिक जानकारी के लिए यह पृष्ठ देखें):

      set path = ( $path .)
      

ध्यान दें कि 2. बहु-उपयोगकर्ता प्रणालियों पर एक सुरक्षा जोखिम है: आपको cdनिर्देशिका की कल्पना करना /tmpऔर एक दुर्भावनापूर्ण उपयोगकर्ता ने एक मैलवेयर बाइनरी बनाया है जिसका नाम lsवहाँ है।


2
हाँ, मुझे लगता है कि विकल्प आपको दिखाते हैं कि यूनिक्स चलो आप चीजों को करते हैं, जिसे बुरा अभ्यास माना जाता है। जोड़ रहा है। अपने रास्ते के लिए अन्य दुष्प्रभाव भी बना सकते हैं जो आम तौर पर खराब होते हैं।
यूनिक्स जेनेटर

1

आपके द्वारा गलत के साथ PATHदुर्भावनापूर्ण प्रोग्राम चलाने पर खुलता है। मानक के तहत "स्थानीय" सामान स्थापित करना है /usr/local(देखें एफएचएस , जो यूनिक्स उपयोग को संहिताबद्ध करता है: थोड़ा दिनांकित लेकिन यह तर्क देता है)।, /usr/local/binआमतौर पर PATHसभी उपयोगकर्ताओं के लिए है।

मेरे "स्थानीय रूप से स्थापित" कार्यक्रम $HOME/binमानक नृत्य में सेट हैं ./configure --prefix=$HOME ..., कुछ (बैश) उपनामों के साथ युग्मित करने के लिए जैसे कि सिस्टम एक पर स्वयं-निर्मित गिट को लेने के लिए (गैर-क्लैशिंग वाले PATHबहुत अंत में पाए जाते हैं ।

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