¿Cómo funciona la línea de órdenes de un acceso (argumentos) como variables de entorno en Erlang. (Como las banderas, no ARGV) Por ejemplo:Erlang: ¿Cómo acceder a las banderas de la CLI (argumentos) como variables de entorno de aplicaciones?
RabbitMQ cli ve algo como:
erl \
...
-sasl errlog_type error \
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
... # more stuff here
Si uno mira a sasl.erl
que ver la línea:
get_sasl_error_logger() ->
case application:get_env(sasl, sasl_error_logger) of
% ... etc
Por un poco de magia desconocida la sasl_error_logger
variable se convierte en una tupla erlang! He intentado replicar esto en mi propia Erlang application
, pero parece ser sólo capaz de acceder a estos valores a través de init:get_argument
, que devuelve el valor como una cadena.
¿Cómo uno pase en valores a través de la línea de comandos y acceder a ellos fácilmente como términos Erlang?
ACTUALIZACIÓN También para todos aquellos que buscan, a utilizar las variables de entorno en la forma 'regular' utilizar os:getenv("THE_VAR")
Alan, gracias por la punta. Tengo el param en mi archivo '.app'. Buenas noticias: obtengo el valor predeterminado especificado en el archivo '.app'. Malas noticias: parece que no puedo anularlo en la línea de comando. –
Nate, ¿podría mostrarnos su archivo de aplicación y el comando se inicia con Erlang? – Zed
Sí, debería funcionar, por lo que probablemente haya algo sospechoso en su línea de comandos. ¿Has iniciado tu aplicación cuando accedes al entorno? –