إيرلانج:كيفية الوصول إلى علامات CLI (الوسائط) كمتغيرات بيئة التطبيق؟

StackOverflow https://stackoverflow.com/questions/1213108

سؤال

كيف يمكن الوصول إلى علامة سطر الأوامر (الوسائط) كمتغيرات البيئة في Erlang.(كأعلام، وليس ARGV) على سبيل المثال:

تبدو واجهة RabbitMQ cli شيئًا مثل:

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 يصبح المتغير صفًا إرلانج!لقد حاولت تكرار هذا في إرلانج الخاص بي application, ، لكن يبدو أنني لا أستطيع الوصول إلى هذه القيم إلا عبر init:get_argument, ، والتي ترجع القيمة كسلسلة.

كيف يمكن للمرء تمرير القيم عبر سطر الأوامر ويكون قادرًا على الوصول إليها بسهولة كمصطلحات إرلانج؟

تحديث أيضًا لأي شخص يبحث عن استخدام متغيرات البيئة بالطريقة "العادية" للاستخدام os:getenv("THE_VAR")

هل كانت مفيدة؟

المحلول

تأكد من إعداد ملف تكوين التطبيق

{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).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top