Command line Erlang:如何作为应用程序环境变量访问CLI标志(参数)?

Command line Erlang:如何作为应用程序环境变量访问CLI标志(参数)?,command-line,erlang,arguments,environment-variables,Command Line,Erlang,Arguments,Environment Variables,如何访问命令行标志(参数)作为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 applicati

如何访问命令行标志(参数)作为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\u error\u logger
变量变成了一个erlang元组!我已经尝试在我自己的erlang
应用程序中复制它,但我似乎只能通过
init:get\u参数
访问这些值,该参数以字符串形式返回值

如何通过命令行传入值,并能够像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),

但是(这可能很重要)我的应用程序此时启动(实际上可能只需要加载,而不是通过查看应用程序\u控制器代码来启动)。

Alan,谢谢你的提示。我的
.app
文件中确实有参数。好消息:我得到了
.app
文件中指定的默认值。坏消息:我似乎无法在命令行上覆盖它。Nate,你能给我们看看你的应用程序文件和启动erlang的命令吗?是的,它应该可以工作,所以你的命令行中可能有可疑的东西。您是否在访问环境时启动了应用程序?