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

标签 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 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 代码开始)。

关于command-line - Erlang:如何访问 CLI 标志(参数)作为应用程序环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213108/

相关文章:

linux - 根据linux中的字符位置排序

macos - Mdfind 排除文件夹

scala - Scala 中的 'yield' 是否等同于 map 函数?

list - erlang列表理解问题

c - 尝试使用 getopt 解析 c 中的输入

C++ 将结构成员作为参数传递

javascript - 所有参数的总和(有些参数是数组);总和( [1,2,3,4], 50, 10, [10, 20],1 )

git - 我可以使用 SSH URL 检查 git 存储库是否存在吗?

java - 包含 jar 存档而不包含在环境变量中

string - Haskell 中二进制文件和位串的模式匹配/解构,类似于 Elixir/Erlang 中的模式匹配/解构