कुछ कार्यक्रमों को एक पथ मान की आवश्यकता क्यों है, और कुछ अन्य विंडोज में नहीं हैं?


6

जब मैं विंडोज 7/8/10 पर संगीतकार स्थापित करता हूं, या कुछ यूएनआईएक्स-अनुकूल कार्यक्रम जैसे कि जीएनयू टार , मुझे उनका पथ मान सेट करने की आवश्यकता है, और अगर मैं नहीं करता हूं, तो वे अन्य कार्यक्रमों द्वारा उपयोग करने योग्य नहीं होंगे?


1
कमांड-लाइन सामान बेहतर काम करता है यदि आपके पास यह है %PATH%, तो आप नए कमांड को "शेल" में टाइप कर सकते हैं।
सिलेंडरलड

ठीक है, इसका मतलब यह होगा कि अन्य कार्यक्रमों को यह अनुमान लगाने की ज़रूरत नहीं है कि कार्यक्रम किस निर्देशिका में है, वे exe का नाम जान सकते हैं और cmd पथ को स्कैन कर सकते हैं।
बारलोप

जवाबों:


3

मैंने इसका जवाब Microsoft Windows के लिए दिया। मैं देख रहा हूँ कि यहाँ पर एक लिनक्स टैग भी है। खैर, वही अवधारणाएं लागू होती हैं। (आगे के लिनक्स नोटों का अंतिम पैराग्राफ में उल्लेख किया गया है।)

यदि आप PATH परिवेश चर द्वारा निर्दिष्ट निर्देशिका में नहीं हैं, तो आप प्रोग्राम का उपयोग कर सकते हैं। हालांकि, यह थोड़ा कम सुविधाजनक है।

उदाहरण के लिए, मैं अक्सर 7-ज़िप चलाता हूं, भले ही वह रास्ते में न हो। इसलिए "7z" के साथ कमांड लाइन शुरू करने के बजाय, मैं कमांड लाइन को इसके साथ शुरू करता हूं:
"C:\Program Files\7-Zip\7z.exe"

यह जितना दिखता है उतना बुरा नहीं है, क्योंकि मैं वास्तव में जो टाइप करता हूं वह आमतौर पर कुछ अधिक होता है जैसे:
C: \ tabPro tab7 tab7tab

(मैं बीप्स के लिए सुनता हूं जो अगर टाइपो हैं, तो हो सकता है और tabकुंजी के साथ मेरे अंतिम विस्तार के बाद , मैं सटीकता के लिए कमांड लाइन की भी जांच करता हूं, यह सुनिश्चित करने के लिए कि यह वही चलाता है जो मैं इसे चाहता था।)

एक प्रोग्राम यह जांच सकता है कि आपने कमांड लाइन पर प्रोग्राम को कैसे संदर्भित किया है, और अपनी वर्तमान निर्देशिका की जांच कर सकता है। तो एक कार्यक्रम अलग-अलग कार्य कर सकता है, अगर यह पाथ में है। हालाँकि, यह संभावना नहीं है।

एक वैकल्पिक समाधान: PATH पर्यावरण चर को समायोजित करने के लिए उस निर्देशिका को भी शामिल करें जहाँ कोई प्रोग्राम स्थापित है।

एक अन्य वैकल्पिक समाधान: निष्पादन योग्य फ़ाइल को एक निर्देशिका में रखें जो पहले से ही पैट में है। (हालांकि, कुछ प्रोग्राम अधिक जटिल होते हैं, क्योंकि उन्हें अन्य फ़ाइलों की भी आवश्यकता हो सकती है, जैसे DLL फाइलें, इस तरह के डायरेक्टरी में कॉपी की जाती हैं। इसलिए, इस दृष्टिकोण को आमतौर पर उन प्रोग्रामों के लिए अनुशंसित नहीं किया जाता है जिन्हें आपको "इंस्टॉलेशन" करके "इंस्टॉल" करने की आवश्यकता होती है। कार्यक्रम "। हालांकि, सरल निष्पादक के लिए जो समर्थन फ़ाइलों का एक गुच्छा की आवश्यकता के बिना चलाया जा सकता है, यह अक्सर व्यवहार्य है।)

लिनक्स में, कुछ मामूली अंतर हैं: आप " echo ${PATH}" के बजाय " " का उपयोग करेंगे echo %PATH%, बैकस्लैश के बजाय आगे स्लैश का उपयोग करें, इसके बजाय 7za7-ज़िप के लिए उपयोग करें 7z.exe। यदि आप पथ को समायोजित करना चाहते हैं, तो आप एक अलग कमांड का उपयोग कर सकते हैं, जैसे export, लेकिन वास्तव में आपके द्वारा उपयोग किए जाने वाले शेल पर निर्भर करता है।)


चीजों के लिनक्स पक्ष पर अधिक जानकारी के लिए, AskUbuntu पर प्रश्नकर्ता के बाद के प्रश्न देखें: askubuntu.com/questions/715208
JDBP

2

कुछ कार्यक्रमों को एक पथ मान की आवश्यकता क्यों है, और कुछ अन्य विंडोज में नहीं हैं?

जब मैं विंडोज 7/8/10 पर संगीतकार स्थापित करता हूं, या कुछ यूएनआईएक्स-अनुकूल कार्यक्रम जैसे कि जीएनयू टार, मुझे उनका पथ मान सेट करने की आवश्यकता है, और अगर मैं नहीं करता हूं, तो यह अन्य कार्यक्रमों द्वारा उपयोग करने योग्य नहीं होगा?

पथ यूनिक्स जैसे ऑपरेटिंग सिस्टम, डॉस, ओएस / 2 और माइक्रोसॉफ्ट विंडोज पर एक पर्यावरण चर है, निर्देशिका के एक सेट को निर्दिष्ट करते हुए जहां निष्पादन योग्य कार्यक्रम स्थित हैं। सामान्य तौर पर, प्रत्येक निष्पादन प्रक्रिया या उपयोगकर्ता सत्र की अपनी पैथ सेटिंग होती है।

डॉस, ओएस / 2, और विंडोज

कुछ प्रोग्राम स्थापना के दौरान PATH चर की सामग्री के सामने अपनी निर्देशिका जोड़ सकते हैं, ताकि खोज प्रक्रिया और / या OS आदेशों को गति दी जा सके। डॉस युग में, एक PATH {program directory};%PATH%या SET PATH={program directory};%PATH%लाइन को जोड़ने के लिए प्रथागत था AUTOEXEC.BAT

जब एक कमांड शेल में एक कमांड दर्ज किया जाता है या किसी प्रोग्राम को निष्पादित करने के लिए एक प्रोग्राम द्वारा एक सिस्टम कॉल किया जाता है, तो सिस्टम पहले वर्तमान वर्किंग डाइरेक्टरी को खोजता है और फिर एक एग्जीक्यूटेबल फाइलनाम की तलाश में, बाएं से दाएं की ओर प्रत्येक डाइरेक्टरी की जांच करता है। जो दिए गए कमांड नाम से मेल खाता है। निष्पादन योग्य कार्यक्रमों में फ़ाइल नाम का विस्तार EXEया COM, और बैच स्क्रिप्ट के एक्सटेंशन हैं BATया CMD। अन्य निष्पादन योग्य फ़ाइल एक्सटेंशन को सिस्टम के साथ भी पंजीकृत किया जा सकता है।

यूनिक्स और यूनिक्स की तरह

जब एक कमांड नाम उपयोगकर्ता द्वारा निर्दिष्ट किया जाता है या एक प्रोग्राम से एक निष्पादन कॉल किया जाता है, तो सिस्टम खोजता है $PATH, सूची में बाएं से दाएं प्रत्येक सूची की जांच करता है, कमांड नाम से मेल खाने वाले फ़ाइलनाम की तलाश करता है। एक बार मिल जाने के बाद, प्रोग्राम को कमांड शेल या प्रोग्राम जारी करने वाले प्रोग्राम के चाइल्ड प्रोसेस के रूप में निष्पादित किया जाता है।

स्रोत: PATH_ (परिवर्तनशील)


1

विंडोज में, एक एप्लिकेशन {HKCU|HKLM}\Software\Microsoft\Windows\CurrentVersion\App Pathsरजिस्ट्री के तहत अपना रास्ता पंजीकृत कर सकता है । Windows तब याद रखेगा कि PATHपर्यावरण चर को फुलाए बिना संबंधित .exe फ़ाइल को कहां खोजना है ।

से आवेदन पंजीकरण :

प्रति उपयोगकर्ता के लिए इंस्टॉल किया गया एक एप्लिकेशन HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ App पथ के तहत पंजीकृत किया जा सकता है। कंप्यूटर के सभी उपयोगकर्ताओं के लिए स्थापित किया गया एक अनुप्रयोग HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ App पथ के तहत पंजीकृत किया जा सकता है।

ऐप पाथ्स के तहत मिलने वाली प्रविष्टियाँ मुख्य रूप से निम्नलिखित उद्देश्यों के लिए उपयोग की जाती हैं:

  • किसी एप्लिकेशन के निष्पादन योग्य फ़ाइल नाम को उस फ़ाइल के पूर्ण योग्य पथ पर मैप करने के लिए।
  • प्रति आवेदन, प्रति-प्रक्रिया के आधार पर पेटीएम पर्यावरण चर के लिए जानकारी पूर्व-पेंड करने के लिए।

उदाहरण के लिए, एक डिफ़ॉल्ट विंडोज इंस्टॉलेशन में रजिस्ट्री प्रविष्टि है:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE
(Default)="%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE"

यह वर्डपैड को स्टार्ट / रन से टाइपिंग-इन wordpad( बस या start wordpadएक सीएमडी प्रॉम्प्ट पर) शुरू करने की अनुमति देता है, भले ही %ProgramFiles%\Windows NT\Accessoriesयह पेट में न हो।


यह रन इन स्टार्ट मेनू के साथ काम करता है। फिर भी यह दृष्टिकोण कमांड प्रॉम्प्ट के साथ काम नहीं करता है: आपको पथ में निष्पादन योग्य होना चाहिए।
एलेक्सी इवानोव

@AlexeyIvanov यह लिखित रूप में cmd ​​प्रॉम्प्ट पर काम करता है। ध्यान दें कि आपको उपयोग करना होगा start- start wordpadकाम करेगा, लेकिन बस wordpadनहीं होगा। (एपीआई स्तर पर अंतर यह है कि startShellExecEx को कॉल करता है जो पहचानता है और इसका उपयोग करता है App Paths, जबकि सीधे CreateProcess को कॉल करता है जो नहीं करता है।)
dxiv

यदि आपको startइस मामले में एक और कमांड का उपयोग करना है , बल्कि उस प्रोग्राम का नाम जिसे आप चलाना चाहते हैं, तो यह काम नहीं करता है। और यह छोटा विवरण बड़ी बात है। (मुझे अंतर के बारे में पता है, धन्यवाद।)
एलेक्सी इवानोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.