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


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.