2009-07-31 7 views
7

एरलंग में पर्यावरण चर के रूप में एक कमांड लाइन ध्वज (तर्क) कैसे पहुंचता है। उदाहरण के लिए (झंडे, नहीं ARGV के रूप में):Erlang: अनुप्रयोग पर्यावरण चर के रूप में सीएलआई झंडे (तर्क) तक कैसे पहुंचे?

erl \ 
... 
-sasl errlog_type error \ 
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \ 
... # more stuff here 

एक sasl.erl पर लग रहा है, तो आप लाइन देखें::

get_sasl_error_logger() -> 
    case application:get_env(sasl, sasl_error_logger) of 
% ... etc 

किसी अज्ञात जादू sasl_error_logger तक

RabbitMQ CLI तरह दिखता है परिवर्तनीय एक erlang tuple बन जाता है! मैंने इसे अपने स्वयं के erlang application में दोहराने की कोशिश की है, लेकिन मुझे लगता है कि init:get_argument के माध्यम से इन मानों तक पहुंचने में सक्षम है, जो एक स्ट्रिंग के रूप में मान देता है।

कोई कमांडलाइन के माध्यम से मूल्यों में कैसे गुजरता है और उन्हें एरलांग शर्तों के रूप में आसानी से एक्सेस करने में सक्षम होता है?

अद्यतन किसी के लिए भी भी की तलाश में, 'नियमित' रास्ते में वातावरण चरों का उपयोग करने के लिए उपयोग os:getenv("THE_VAR")

उत्तर

7

आप किसी अनुप्रयोग विन्यास फाइल

{application, fred, 
[{description, "Your application"}, 
    {vsn, "1.0"}, 
    {modules, []}, 
    {registered,[]}, 
    {applications, [kernel,stdlib]}, 
    {env, [ 
    {param, 'fred'} 
     ] 
... 

की स्थापना सुनिश्चित करें और फिर आप सेट कर सकते हैं अपने कमांड लाइन इस तरह:

-fred param 'billy' 

मुझे लगता है कि आपको पैरामीटर होना चाहिए यह करने के लिए अपने आवेदन विन्यास - मैं इसे किसी अन्य तरीके से कभी नहीं किया है ...

कुछ अधिक जानकारी (आसान एक टिप्पणी में डालने से) को देखते हुए इस

{emxconfig, {ets, [{keypos, 2}]}}, 

मैं

निश्चित रूप से ऐसा करते हैं:

{ok, {StorageType, Config}} = application:get_env(emxconfig), 

लेकिन (और यह महत्वपूर्ण हो सकता है) अपने आवेदन इस समय शुरू होता है (वास्तव में सिर्फ ख करना पड़ सकता है ई लोड और वास्तव में application_controller कोड को देखने से शुरू नहीं किया)।

+0

एलन, टिप के लिए धन्यवाद। मेरे पास मेरी '.app' फ़ाइल में param है। अच्छी खबर: मुझे '.app' फ़ाइल में निर्दिष्ट डिफ़ॉल्ट मान मिलता है। बुरी खबर: मैं कमांड लाइन पर इसे ओवरराइड नहीं कर सकता। –

+0

नाट, क्या आप हमें अपनी ऐप फ़ाइल दिखा सकते हैं और जिस आदेश से आप erlang शुरू करते हैं? – Zed

+0

हां - यह काम करना चाहिए ताकि आपकी कमांड लाइन में शायद कुछ ख़राब हो। क्या आपने पर्यावरण तक पहुंचने के दौरान अपना ऐप शुरू किया है? –

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