Erlang : 응용 프로그램 환경 변수로 CLI 플래그 (인수)에 액세스하는 방법은 무엇입니까?
-
06-07-2019 - |
문제
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
, 값을 문자열로 반환합니다.
한 사람은 CommandLine을 통해 값을 어떻게 전달하고 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 코드를 보면서 시작하지 않아도됩니다).
제휴하지 않습니다 StackOverflow