2012-02-19 16 views
5

संभव डुप्लिकेट:
Exporting an Environment Variable in Rubyक्या रूबी स्क्रिप्ट से पर्यावरण संपत्ति निर्यात करना संभव है?

मैं रूबी स्क्रिप्ट के अंदर से कई पर्यावरण गुणों को सेट करने की जरूरत है।

आम तौर पर, पार्टी में, मैं निम्न करें:

$ export SOME_VAR=some_value 

लेकिन रूबी में, निम्नलिखित (जाहिर है) काम नहीं करता:

irb(main):002:0> `export SOME_VAR=some_value` 
(irb):2: command not found: export ASDF=1 
=> "" 

वहाँ यह करने के लिए कोई तरीका है?

+1

यह ध्वनि मेरे पीछे की ओर है। आप क्या हासिल करने का प्रयास कर रहे हैं? –

+0

@JensTinfors मैंने अभी इसे एक रूबी स्क्रिप्ट में उपयोग किया है जो कुछ खोल कमांड बनाता है, जिनमें से एक विशिष्ट पर्यावरण चर सेट करने की अपेक्षा करता है। अगर मैं इसे एक बैश स्क्रिप्ट में कर रहा था तो मैं 'export' का उपयोग करूंगा, लेकिन यह रूबी शेल कमांड (बैकटिक्स या सिस्टम) के माध्यम से काम नहीं करेगा। ऐसा लगता है कि उत्तर की तरह एनएनवी का उपयोग करके ठीक काम करता है, इसलिए यह मेरे लिए बहुत मूल्यवान था। –

+0

@ मैक्सविल्लियम्स यह सिर्फ इतना है कि आपके द्वारा सेट किए गए पर्यावरण चर केवल वर्तमान प्रक्रिया के लिए होंगे। पीछे से मेरा मतलब है कि पर्यावरण खोल से संबंधित है, रूबी प्रक्रिया खोल का एक उपप्रजाय है, मेरा मतलब क्या है? :) –

उत्तर

8

http://ruby.about.com/od/rubyfeatures/a/envvar.htm के अनुसार, तुम सिर्फ लिख सकते हैं:

ENV['SOME_VAR'] = 'some_value' 
+1

एनबी: यह वर्तमान रूबी प्रक्रिया के साथ-साथ किसी भी उप-प्रक्रियाओं के लिए पर्यावरण चर सेट करेगा (उदाहरण: कि आप 'सिस्टम' या बैकटिक्स के साथ बनाते हैं)। –

+0

@ केलीबर्टन: हाँ, बिल्कुल। मुझे लगता है कि ओपी चाहता है कि वही है, लेकिन मैं गलत हो सकता है। – ruakh

1

`ENV ['SOME_VAR'] = 'some_value' आज़माएं।

स्क्रिप्ट समाप्त होने के बाद, आप स्क्रिप्ट को निष्पादित करने वाले पर्यावरण में इस निरंतर प्रभाव को नहीं बना सकते हैं।

एक चाल है कि मेरे जवाब देने के लिए टिप्पणी में चर्चा हो रही है, अपने गहरे लाल रंग का स्क्रिप्ट से, कंसोल के लिए मान्य खोल कोड मुद्रित करने के लिए है - यह नहीं आपको क्या चाहिए है, लेकिन यह यह पता करने के लिए कर सकता है उपयोगी हो सकता है उस तरह से काम करो।

$ echo "puts 'export foo=bar'" > test.rb 
$ echo $foo 

$ source <(ruby test.rb) 
$ echo $foo 
bar 
+1

मुझे वास्तव में नहीं लगता कि 'स्रोत।/My_script.rb' काम पर किया जा सकता है। इसके बारे में सोचें - जो भी आप सच कह रहे हैं, उसके लिए रूबी स्क्रिप्ट को मौजूदा बैश खोल के समान प्रक्रिया में भागना होगा, और फिर, जब रूबी स्क्रिप्ट समाप्त हो गई, तो प्रक्रिया को एक होने के लिए वापस जाना होगा बैश खोल – ruakh

+0

इस मामले में शेबैंग कैसा दिखना चाहिए? –

+0

आप इस तरह के बैश वाले प्रोग्राम के आउटपुट को 'स्रोत' कर सकते हैं: 'स्रोत <(./ my_script.rb)' –

1

आप के बाद स्क्रिप्ट समाप्त हो गया है यह मान लागू करने के लिए नहीं करना चाहते हैं, तो आप ENV सीधे बदल सकते हैं।

ENV['SOME_VAR'] = 'some_value' 
puts ENV['SOME_VAR'] 
# => some_value 

आप हठ करना चाहते हैं, तो आप शायद (इस के अलावा) अपने सिस्टम पर एक ~/.bashrc या इसी तरह की फाइल करने के लिए इस वर लिखने के लिए की है।

संबंधित मुद्दे