किसी फ़ाइल से चर कैसे निर्यात करें?


78

मेरे पास tmp.txtनिर्यात की जाने वाली चर वाली फ़ाइल है, उदाहरण के लिए:

a=123
b="hello world"
c="one more variable"

मैं exportकमांड का उपयोग करके इन सभी चर को कैसे निर्यात कर सकता हूं , ताकि बाद में उनका उपयोग बाल प्रक्रियाओं द्वारा किया जा सके?


1
बैश --init-फ़ाइल somefile.blah -c "कमांड"
— Dillian Murphey

SO का एक उपयोगी उत्तर है कि जब आप किसी डायरेक्टरी में होते हैं तो फाइल को कैसे सोर्स.env करते हैं cd।
— दान डस्केलस्क्यू

@ नीरव कृपया अन्य उत्तर स्वीकार करें। यह एक बेहतर उपाय है।
— कोडरुडे

जवाबों:


64
source tmp.txt
export a b c
./child ...

आपके अन्य प्रश्न को देखते हुए, आप चर नामों को हार्डकोड नहीं करना चाहते:

source tmp.txt
export $(cut -d= -f1 tmp.txt)

झसे आज़माओ:

$ source tmp.txt
$ echo "$a $b $c"
123 hello world one more variable
$ perl -E 'say "@ENV{qw(a b c)}"'

$ export $(cut -d= -f1 tmp.txt)
$ perl -E 'say "@ENV{qw(a b c)}"'
123 hello world one more variable

2
यह काम नहीं करेगा यदि पर्यावरण फ़ाइल में टिप्पणियां हैं, उदाहरण के लिए। (उदाहरण के लिए। फाइलें जो सिस्टमड्स एन्वायर्नमेंटफाइल द्वारा पुन: उपयोग की जा सकती हैं)
— क्रिस मेम्ने

3
@ क्रिसलम्ब आप grepटिप्पणियों को छोड़ने के लिए उपयोग कर सकते हैं :export $(grep --regexp ^[A-Z] tmp.txt | cut -d= -f1)
— gvee

180
set -a
. ./tmp.txt
set +a

set -aवेरिएबल्स को अब से परिभाषित होने के कारण स्वचालित रूप से निर्यात किया जाता है। यह किसी भी बॉर्न-जैसे शेल में उपलब्ध है। कमांड के .लिए मानक और बॉर्न नाम है, sourceइसलिए मैं इसे पोर्टेबिलिटी के लिए पसंद करता हूं ( sourceआता है cshऔर अब सहित अधिकांश आधुनिक बॉर्न जैसे गोले में उपलब्ध bashहै) (कभी-कभी थोड़ा अलग व्यवहार के साथ)।

POSIX गोले में, आप set -o allexportइसे लिखने के set +o allexportलिए ( परेशान करने के लिए) एक अधिक वर्णनात्मक वैकल्पिक तरीके के रूप में भी उपयोग कर सकते हैं ।


¹ में bash, सावधान रहें कि यह घोषित सभी कार्यों का कारण बनता है जबकि allexportपर्यावरण को निर्यात किया जाना है (जैसा BASH_FUNC_myfunction%%कि पर्यावरण चर जो तब bashउस वातावरण में चलने वाले सभी गोले द्वारा आयात किया जाता है, यहां तक ​​कि जब भी चल रहा हो sh)।


1

बस करो:

while read LINE; do export "$LINE"; done < ./tmp.txt

क्या आपने जाँच की कि क्या काम करता है?
— राल्फफ्राइडल

@RalfFriedl यह काम करना चाहिए, क्यों नहीं? यह बहुत सुंदर नहीं है और इसके साथ सोर्सिंग set -aकरना अधिक सरल होगा, लेकिन यह वास्तव में काम करता है।
— terdon

यह भंगुर है। यह इनपुट फ़ाइल में टिप्पणियों की अनुमति नहीं देता है, उद्धृत चर मानों को ठीक से नहीं संभालता है, और बहु-पंक्ति चर पर विफल रहता है। दी, मेरे पास कई बहु-पंक्ति चर नहीं हैं, लेकिन मैं नियमित रूप से टिप्पणियों का उपयोग करता हूं और अक्सर चर मूल्यों के लिए उद्धरण का उपयोग करने की आवश्यकता होती है।
— लुई

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