Envsubst के साथ केवल विशिष्ट चर की जगह


51

मैं पर्यावरण चर प्रतिस्थापन के माध्यम से प्रदर्शन करने की कोशिश कर रहा हूं envsubst, लेकिन मैं केवल विशिष्ट चर को बदलना चाहता हूं।

डॉक्स से मुझे envsubstकेवल कुछ वेरिएबल्स को बदलने में सक्षम होना चाहिए, लेकिन मैं ऐसा करने में सक्षम नहीं हो पा रहा हूं।

उदाहरण के लिए, यदि मेरे पास कोई फ़ाइल है:

VAR_1=${VAR_1}
VAR_2=${VAR_2}

मुझे कैसे निष्पादित करना चाहिए envsubstताकि यह केवल संदर्भ को बदल दे ${VAR_1}?

जवाबों:


3

कॉल करने से पहले envsubstआपको वापस VAR_1संशोधित होने के लिए एकल उद्धरणों का उपयोग करके निर्यात का उपयोग करना चाहिए । जैसे की:

export VAR_1='somevalue'

अधिक जानकारी के लिए, कृपया देखें:

जटिल पाठ फ़ाइलों में शेल चरों को स्थानापन्न कैसे करें


15
सही उत्तर नीचे है
क्रेग

125

प्रति आदमी पृष्ठ:

envsubst [OPTION] [SHELL-FORMAT]

यदि SHELL-FORMAT दिया जाता है, केवल उन पर्यावरण चर जिन्हें SHELL-FORMAT में संदर्भित किया जाता है, प्रतिस्थापित किए जाते हैं; अन्यथा मानक इनपुट में होने वाले सभी पर्यावरण चर संदर्भ प्रतिस्थापित किए जाते हैं।

जहाँ SHELL-FORMAT तार "फार्म में शेल चरों के संदर्भ में तार$variable${variable} होते हैं या [...] चर नामों में केवल अल्फ़ान्यूमेरिक या अंडरस्कोर ASCII वर्ण शामिल होने चाहिए, न कि एक अंक से शुरू करें और नॉनमेप खाली हों; अन्यथा ऐसा कोई चर संदर्भ है अवहेलना करना।"
तो, एक envsubstशेल प्रारूप स्ट्रिंग में संबंधित चर नामों को पास करना होगा (जाहिर है, उन्हें भागने / उद्धृत करने की आवश्यकता है ताकि शाब्दिक रूप से पारित किया जा सके envsubst)। उदाहरण:

इनपुट फ़ाइल जैसे infile:

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

और जैसे कुछ मान

export  VAR1="one" VAR2="two" VAR3="three"

फिर चल रहा है

envsubst '${VAR1} ${VAR3}' <infile

या

envsubst '${VAR1},${VAR3}' <infile

या

envsubst '${VAR1}
${VAR3}' <infile

आउटपुट

VAR1=one
VAR2=${VAR2}
VAR3=three

या, यदि आप बैकस्लैश पसंद करते हैं:

envsubst \$VAR1,\$VAR2 <infile

पैदा करता है

VAR1=one
VAR2=two
VAR3=${VAR3}

12
यह स्वीकृत उत्तर क्यों नहीं है?
कासिरिस

3
हाँ यह सही उत्तर है!
थॉमस डेकाक्स

3
यदि आप एक चर उपसर्ग जानते हैं जिसका उपयोग चर को सीमित करने के लिए किया जा सकता है:envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
सैम लिडिकॉट

या यदि आपके पास उनमें से एक सूची है SUBST_VARS:envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile
सैम लिडिकॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.