2009-07-31 5 views
7

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")

Odpowiedz

7

Upewnij skonfigurować plik konfiguracyjny aplikacji

{application, fred, 
[{description, "Your application"}, 
    {vsn, "1.0"}, 
    {modules, []}, 
    {registered,[]}, 
    {applications, [kernel,stdlib]}, 
    {env, [ 
    {param, 'fred'} 
     ] 
... 

a następnie można ustawić tak, linia poleceń wygląda tak:

-fred param 'billy' 

Myślę, że musisz mieć parametr w konfiguracja aplikacji, aby to zrobić - nigdy nie zrobił to w inny sposób ...

Niektóre więcej informacji (łatwiejsze niż wprowadzenie go w komentarzu)

Biorąc to

{emxconfig, {ets, [{keypos, 2}]}}, 

mogę na pewno to zrobić:

{ok, {StorageType, Config}} = application:get_env(emxconfig), 

ale (a to może być ważne) moja aplikacja jest uruchomiona w tym czasie (może faktycznie wystarczy do b Załadowano i nie zacząłem od obejrzenia kodu application_controller.

+0

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ń. –

+0

Nate, czy mógłbyś pokazać nam swój plik aplikacji i polecenie, z którym zaczynasz erlang? – Zed

+0

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? –

Powiązane problemy