Pergunta

Como o flag de linha de comando de um acesso (argumentos) como variáveis ??de ambiente em Erlang. (Como bandeiras, não argv) Por exemplo:

RabbitMQ cli é algo como:

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

Se olharmos para sasl.erl você vê a linha:

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

Por alguma magia desconhecida a variável sasl_error_logger torna-se uma tupla erlang! Eu tentei replicar isso em minha própria application erlang, mas parece-me ser apenas capaz de acessar estes valores via init:get_argument, que retorna o valor como uma string.

Como é que uma passagem em valores através da linha de comando e ser capaz de acessá-los facilmente como termos Erlang?

Atualizar Também para quem procura, para variáveis ??de ambiente uso no uso maneira 'regular' os:getenv("THE_VAR")

Foi útil?

Solução

Certifique-se de criar um arquivo de configuração do aplicativo

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

e, em seguida, você pode definir sua linha de comando assim:

-fred param 'billy'

Eu acho que você precisa ter o parâmetro na configuração do aplicativo para fazer isso - Eu nunca fiz isso de outra maneira ...

Alguns mais info (mais fácil do que colocá-lo em um comentário)

Dada esta

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

Eu posso certamente fazer isso:

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

e (e isso pode ser importante) minha aplicação é iniciada neste momento (pode realmente só precisa ser carregado e não começou realmente de olhar para o código application_controller).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top