Передать аргументы через оболочку арматуры в erl?

Я использую «арматурную оболочку» для тестирования своего приложения. Это задокументировано как:

Запустите оболочку с предварительно загруженными проектами и приложениями, подобными

'erl -pa ebin -pa deps/*/ebin'.

Как добавить дополнительные аргументы к базовому вызову «erl»? Например, я хочу добавить переменные среды для конкретного приложения и запустить модуль/функцию. Я хочу вызвать что-то вроде:

 erl -pa ebin -pa deps/*/ebin -browser_spy browser_exe "/my/dir" -run bs_example test

(и я хочу, чтобы код: priv_dir работал так же, как и при использовании арматурной оболочки, чего не делает приведенная выше команда «erl»).


person Lyn Headley    schedule 27.10.2015    source источник


Ответы (1)


Тебе нельзя

rebar shell на самом деле не выполняет команду erl ..., а только пытается воспроизвести ее поведение.

На самом деле арматура просто превращает себя в оболочку, имитируя -pa, добавляя пути с code:add_pathz

Подробнее о реализации см. здесь:

shell(_Config, _AppFile) ->
    true = code:add_pathz(rebar_utils:ebin_dir()),
    %% scan all processes for any with references to the old user and save them to
    %% update later
    NeedsUpdate = [Pid || Pid <- erlang:processes(),
        proplists:get_value(group_leader, erlang:process_info(Pid)) == whereis(user)
    ],
    %% terminate the current user
    ok = supervisor:terminate_child(kernel_sup, user),
    %% start a new shell (this also starts a new user under the correct group)
    _ = user_drv:start(),
    %% wait until user_drv and user have been registered (max 3 seconds)
    ok = wait_until_user_started(3000),
    %% set any process that had a reference to the old user's group leader to the
    %% new user process
    _ = [erlang:group_leader(whereis(user), Pid) || Pid <- NeedsUpdate],
    %% enable error_logger's tty output
    ok = error_logger:swap_handler(tty),
    %% disable the simple error_logger (which may have been added multiple
    %% times). removes at most the error_logger added by init and the
    %% error_logger added by the tty handler
    ok = remove_error_handler(3),
    %% this call never returns (until user quits shell)
    timer:sleep(infinity).
person Lol4t0    schedule 27.10.2015