2009-07-31 118 views
7

如何在Erlang中訪問命令行標誌(參數)作爲環境變量。 (作爲標誌,而非argv)例如:Erlang:如何訪問CLI標誌(參數)作爲應用程序環境變量?

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條件一樣輕鬆訪問它們?

UPDATE也爲尋找,使用環境變量在「常規」方式使用os:getenv("THE_VAR")

回答

7

確保您建立了一個應用程序配置文件

{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), 

(這可能是重要的),我的應用程序是在這個時候開始(實際上可能只需要到b e加載並且實際上並未從查看application_controller代碼開始)。

+0

艾倫,感謝您的提示。我的`.app`文件中有參數。好消息:我得到`.app`文件中指定的默認值。壞消息:我似乎無法在命令行上覆蓋它。 – 2009-07-31 16:06:32