बाश में $ {GZIP_BINDIR - '/ bin'} का क्या अर्थ है?


13

क्या कोई समझा सकता है कि इस आदेश का क्या मतलब है?

PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH

जवाबों:


19

${GZIP_BINDIR-'/bin'}एक bashपैरामीटर विस्तार पैटर्न है। से man bash:

${parameter:-word}
              Use Default Values.  If parameter is unset or null, 
the expansion of word is substituted.  Otherwise, the  value  of parameter
is substituted.

इस हिस्से के तुरंत पहले के मैन पेज में (सूचित करने के लिए @jwodder का धन्यवाद) है:

Omitting the colon results in a test only for a parameter that is unset.

जैसा कि मैनपेज कहता है, यह चर का डिफ़ॉल्ट मान सेट करेगा GZIP_BINDIR। यदि GZIP_BINDIRकोई मान पहले से सेट है (शून्य के अलावा जैसा कि आप उपयोग नहीं कर रहे हैं :) तो उस मूल्य का उपयोग किया /binजाएगा , अन्यथा चर के मूल्य के रूप में उपयोग किया जाएगा GZIP_BINDIR

दूसरी ओर यदि आप अशक्त मूल्यों के लिए भी परीक्षण करना चाहते हैं, तो इस पैटर्न का उपयोग करें (शामिल करें :):

${GZIP_BINDIR:-'/bin'}

उसके बाद $PATHवसीयत को उन मूल्यों तक विस्तारित किया जाएगा जो पहले पकड़े हुए थे। तो, अगर PATHपहले था:

/usr/sbin:/usr/bin

अब आपका PATHहोगा (विचार GZIP_BINDIRसेट नहीं है):

/bin:/usr/sbin:/usr/bin

export PATHयह PATHसभी बाल प्रक्रियाओं को उपलब्ध कराएगा।


" मुझे लगता है कि आप एक :में याद किया है${GZIP_BINDIR-'/bin'} " जरूरी नहीं। ${parameter-word}यह भी मान्य है, हालांकि मैन पेज में नहीं लगता है।
nyuszika7h

@ nyuszika7h हाँ..मुझे पहले यह पता नहीं था..क्यों कि इसका
मेन्यू

मेरे कंप्यूटर पर बैश मैनपेज में, अनुभाग के ठीक ऊपर अनुच्छेद :-कहता है: "जब सब्स्टीटर्ड एक्सपेंशन नहीं किया जाता है, तो नीचे दिए गए डॉक्यूमेंट्स का उपयोग करके (उदाहरण के लिए, :-), एक पैरामीटर के लिए बैश टेस्ट जो कि असमतल या अशक्त है। कोलन को छोड़नाकेवल एक पैरामीटर के लिए एक परीक्षण में परिणाम जो
परेशान है

एक साइड-नोट के रूप में, आप निम्न के रूप में PATHऔर exportएक ही कमांड की सेटिंग को संयोजित कर सकते हैं :export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
धान लांडौ

8

क्या वास्तव में पैरामीटर विस्तार के अंदर हाइफ़न से पहले कोई बृहदान्त्र नहीं है ${GZIP_BINDIR-'/bin'}?

इस तरह का निर्माण लगभग हमेशा एक बृहदान्त्र के साथ लिखा जाता है, ${GZIP_BINDIR:-'/bin'}जिसका अर्थ है, "यदि $ GZIP_BINDIR NULL या परेशान है, तो इसे '/ bin' पर सेट करें"

हालांकि, वाक्य रचना आप की आपूर्ति की है मान्य है, लेकिन दुर्लभ। ${GZIP_BINDIR-'/bin'}(कोई कोलन नहीं) का अर्थ है, "यदि $ GZIP_BINDIR परेशान है, तो इसे '/' bin 'पर सेट करें।" यदि इसे सेट किया गया है (घोषित किया गया है) लेकिन इसे सौंपा गया कुछ भी नहीं (जैसे यह पूर्ण है) कुछ भी नहीं डाला जाएगा।

हालांकि पेट के रूप में एक बग यहाँ हो सकता है निम्न चर निर्माण (...} :$ पथ ...) होगा अभी भी अगर $ GZIP_BINDIR सेट लेकिन शून्य है डाला जा। चूँकि यह $ PATH की शुरुआत में एक उपनिवेश जोड़ देगा, यह वर्तमान निर्देशिका को पहले खोजा जाएगा।

यह एक सुरक्षा समस्या के रूप में सबसे अधिक माना जाता है क्योंकि यह आसान बनाता है एक दुर्भावनापूर्ण प्रोग्राम को उसी नाम के साथ मानक कमांड के रूप में इसे केवल वर्तमान निर्देशिका में रखकर चलाया जाता है।

$ GATIP_BINDIR सेट होने पर $ PATH को अपरिवर्तित छोड़ने के लिए लेकिन NULL (खाली) होने पर, सही सिंटैक्स होगा ${GZIP_BINDIR-'/bin:'}$PATH; export PATH

$ PATH को अपरिवर्तित छोड़ने के लिए यदि $ GZIP_BINDIR या तो परेशान है या सेट है, लेकिन NULL, सही सिंटिक होगा ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH


2

यह कमांड पथ परिवर्तन को अद्यतन करता है।

PATHनिर्देशिका जहां निष्पादन योग्य कार्यक्रमों स्थित हैं का एक सेट को निर्दिष्ट करने के लिए एक वातावरण चर रहा है।

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

यह एक और चर का मान जोड़ता है GZIP_BINDIRयदि पिछले PATH से बाहर निकलें, इसके बजाय / बिन का उपयोग करें और इसे PATH में जोड़ें

export PATH

निर्यात का उपयोग सभी बाल प्रक्रियाओं और उप-प्रकारों के लिए उपलब्ध पैट को निर्धारित करने के लिए किया जाता है। इस बारे में अधिक जानकारी के लिए पढ़ें

आपको ध्यान देना चाहिए कि यह स्थिर नहीं है और आपके शेल से बाहर निकलते ही आप इसे ढीला कर देंगे।

इस PATH को स्थायी बनाने के लिए आपको इन पंक्तियों को अपने साथ जोड़ना होगा .bashrc

gedit .bashrc

और लाइन जोड़ें

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

उसके बाद कमांड चलाएँ

source .bashrc

GZIP_BINDIR चर है
Maythux

क्या ठीक नहीं है? नहीं मैंने नहीं किया? मेरा भी
डाउनवॉट है

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