फ़ाइल की सामग्री में शेल चर सेट करने का एक सुंदर तरीका है?


11

कहें कि मेरे पास फ़ाइल में कुछ कॉन्फ़िगरेशन डेटा है config। सुविधा के लिए, मैं इस डेटा को शेल चर में लोड करना चाहूंगा CONFIG_DATA

जाहिर है मैं कर सकता हूँ:

CONFIG_DATA="$(cat config)"

लेकिन यह थोथा मुझे एक बेकार उपयोग कीcat तरह लगता है। क्या ऐसा करने का एकमात्र तरीका है? या यह करने के लिए एक और अधिक सुंदर तरीका है?

उत्तर POSIX को पसंद करना चाहिए लेकिन किसी भी शेल का उपयोग कर सकते हैं।


2
इस तरह मेमोरी में पूरी फ़ाइल पढ़ना लगभग हमेशा एक बुरा विचार है, भले ही आप इसे कैसे लिखें।
सातु कटुरा

2
कुछ मामलों में @SatoKatsura बहुत सच है। हालाँकि इस प्रश्न के उद्देश्य के लिए, आप मान सकते हैं कि फ़ाइल सुपर टिनी है, इसलिए यह कोई बड़ी समस्या नहीं है।
स्ट्रॉन्ग

1
@SatoKatsura: क्यों?
रेमकोगर्लिच

जवाबों:


23

बैश और जेड शेल में, कम से कम, एक तेज़ तरीका है:

CONFIG_DATA=$(<config)

बॉर्न अगेन शेल के मैन पेज से उद्धृत करने के लिए:

कमांड प्रतिस्थापन $ (कैट फ़ाइल) को समकक्ष लेकिन तेजी से $ (<फ़ाइल) द्वारा प्रतिस्थापित किया जा सकता है।


1
मैं इसे एक अच्छा विकल्प नहीं मानता। बिल्ली के बेकार उपयोग के प्रति ओपी की भावनाएं जो भी हैं, ओपी का उदाहरण सरल है कि अधिकांश बैश उपयोगकर्ता इसे समझेंगे। यह काफी पोर्टेबल भी है। अब $(<file)बहुत कम आम है, इसलिए इसका परिणाम बहुत अधिक डब्ल्यूटीएफ हो सकता है; और इस ऑपरेशन से गति प्राप्त होती है, अगर इस तरह के कॉन्फ़िगरेशन को एक चर में लोड किया जाना है, तो शायद यह नगण्य है
मैथ्यू रॉक

6
@MatthewRock ध्यान दें कि बहुत सारी बुरी प्रथाएं आम और परिचित हैं। बिल्ली का बेकार उपयोग एक उदाहरण है, for i in $(cat file); do ...एक और है। कि वे आम हैं खराब उपकरणों का उपयोग करते रहने का कोई कारण नहीं है। जो यह कहना नहीं है कि बिल्ली का यह विशेष उपयोग बहुत बुरा है, मुझे यकीन नहीं है कि अगर कोई अधिक पोर्टेबल तरीका है। सिर्फ इतना कहते हुए कि आम और परिचित! = अच्छा।
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.