2009-07-31 29 views
7

Làm cách nào để truy cập cờ dòng lệnh (đối số) dưới dạng biến môi trường trong Erlang. (Như cờ, không argv) Ví dụ:Erlang: Cách truy cập cờ CLI (đối số) dưới dạng biến môi trường ứng dụng?

RabbitMQ cli trông giống như sau:

erl \ 
... 
-sasl errlog_type error \ 
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \ 
... # more stuff here 

Nếu ai đó nhìn vào sasl.erl bạn nhìn thấy dòng:

get_sasl_error_logger() -> 
    case application:get_env(sasl, sasl_error_logger) of 
% ... etc 

Theo một số chưa biết phép thuật của sasl_error_logger biến trở thành một tuple erlang! Tôi đã cố gắng sao chép này trong erlang của riêng tôi application, nhưng tôi dường như chỉ có thể truy cập các giá trị này thông qua init:get_argument, trả về giá trị dưới dạng một chuỗi.

Làm cách nào để chuyển giá trị thông qua dòng lệnh và có thể truy cập chúng một cách dễ dàng như các thuật ngữ erlang?

CẬP NHẬT Ngoài ra cho bất cứ ai tìm kiếm, sử dụng các biến môi trường theo cách 'thông thường' sử dụng os:getenv("THE_VAR")

Trả lời

7

Hãy chắc chắn rằng bạn đã thiết lập một tập tin cấu hình ứng dụng

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

và sau đó bạn có thể thiết lập của bạn dòng lệnh lên như sau:

-fred param 'billy' 

Tôi nghĩ bạn cần có thông số trong cấu hình ứng dụng của bạn để làm điều này - Tôi chưa bao giờ thực hiện nó bất kỳ cách nào khác ...

Một số thêm thông tin (dễ dàng hơn đặt nó trong một bình luận)

Với này

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

tôi có thể chắc chắn làm được điều này:

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

nhưng (và điều này có thể quan trọng) ứng dụng của tôi được bắt đầu vào thời điểm này (có thể thực sự chỉ cần b e nạp và không thực sự bắt đầu từ nhìn vào mã application_controller).

+0

Alan, cảm ơn mẹo. Tôi có param trong tập tin '.app' của tôi. Tin tốt: Tôi nhận được giá trị mặc định được chỉ định trong tệp '.app'. Tin xấu: Tôi dường như không thể ghi đè lên dòng lệnh. –

+0

Nate, bạn có thể hiển thị cho chúng tôi tệp ứng dụng của bạn và lệnh bạn bắt đầu xóa không? – Zed

+0

Có - nó sẽ hoạt động vì vậy có thể có một cái gì đó fishy trong dòng lệnh của bạn. Bạn đã bắt đầu ứng dụng của mình chưa khi bạn truy cập vào môi trường? –

Các vấn đề liên quan