Эрланг: Как получить доступ к флагам (аргументам) 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 становится кортежем erlang! Я попытался воспроизвести это в своем собственном erlang application , но, похоже, я могу получить доступ к этим значениям только через init: get_argument , который возвращает значение в виде строки.

Как передать значения через командную строку и получить легкий доступ к ним, используя термины erlang?

ОБНОВЛЕНИЕ Также для тех, кто ищет, чтобы использовать переменные среды «обычным» способом, используйте 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