W jaki sposób można uzyskać dostęp do flagi wiersza poleceń (argumentów) jako zmiennych środowiskowych w Erlang. (Jak flagi, nie argv) Na przykład:Erlang: Jak uzyskać dostęp do flag CLI (argumentów) jako zmiennych środowiskowych aplikacji?
RabbitMQ CLI wyglądał:
erl \
...
-sasl errlog_type error \
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
... # more stuff here
Jeśli ktoś patrzy na sasl.erl
widać linię:
get_sasl_error_logger() ->
case application:get_env(sasl, sasl_error_logger) of
% ... etc
przez jakiegoś nieznanego magii sasl_error_logger
zmienna staje się krotką Erlanga! Próbowałem replikacji tego w moim własnym erlang application
, ale wydaje się, że jestem w stanie uzyskać dostęp do tych wartości tylko poprzez init:get_argument
, który zwraca wartość jako ciąg znaków.
W jaki sposób można przekazywać wartości za pomocą wiersza poleceń i mieć łatwy dostęp do nich jako terminów erlang?
UPDATE także dla każdego, kto szuka, aby używać zmiennych środowiskowych w „zwykłej” sposób korzystania os:getenv("THE_VAR")
Alan, dzięki za cynk. Mam parametr w moim pliku '.app'. Dobra wiadomość: otrzymuję domyślną wartość określoną w pliku '.app'. Złe wieści: Nie mogę przesłonić go w linii poleceń. –
Nate, czy mógłbyś pokazać nam swój plik aplikacji i polecenie, z którym zaczynasz erlang? – Zed
Tak - powinno działać, więc prawdopodobnie w twoim wierszu poleceń jest coś podejrzanego. Czy uruchomiłeś swoją aplikację przed uzyskaniem dostępu do środowiska? –