Erlang 无法从命令行启动空的OTP应用程序

Erlang 无法从命令行启动空的OTP应用程序,erlang,Erlang,我已使用钢筋创建了OTP应用程序框架: $ rebar create-app appid=test 然后我用钢筋编译了它,当我运行 $ erl -pa ebin -s test 我得到这个错误 {"init terminating in do_boot",{undef,[{test,start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}} 但是如果我从shell调用start,它会工作: $ erl -pa ebin Erlang

我已使用钢筋创建了OTP应用程序框架:

$ rebar create-app appid=test
然后我用钢筋编译了它,当我运行

$ erl -pa ebin -s test
我得到这个错误

{"init terminating in do_boot",{undef,[{test,start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
但是如果我从shell调用start,它会工作:

$ erl -pa ebin

Erlang R15B01 (erts-5.9.1) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
1> application:start(test).
ok
如何从OS命令行启动应用程序

编辑:

我觉得我需要跑步

$ erl -pa ebin -s application start test
现在我没有收到任何错误,但应用程序仍然没有启动…

erl-pa ebin/-eval应用程序:starttest

由于test_app.erl中的start函数具有arity 2,因此无法使用erl开关-s或-run直接调用它,只能使用这些开关调用arity 0或1,请参阅

您可以添加一个包装器函数来调用start/2,但我认为-eval更优雅

erl-pa ebin/-eval应用程序:开始测试

由于test_app.erl中的start函数具有arity 2,因此无法使用erl开关-s或-run直接调用它,只能使用这些开关调用arity 0或1,请参阅

您可以添加一个包装器函数来调用start/2,但我认为-eval更优雅

当显示一个或多个参数时,-s标志假定参数列表。所以$erl-pa ebin-s应用程序启动测试将调用application:start[test],这将无法按预期工作

以下是一个解决方案,它可能不是最佳解决方案:

创建包含以下内容的源文件src/test_init.erl:

-module(test_init).

-compile(export_all).

init() ->
    application:start(test).
然后:

现在,测试应用程序应该正在运行:

当出现一个或多个参数时,-s标志假定参数列表。所以$erl-pa ebin-s应用程序启动测试将调用application:start[test],这将无法按预期工作

以下是一个解决方案,它可能不是最佳解决方案:

创建包含以下内容的源文件src/test_init.erl:

-module(test_init).

-compile(export_all).

init() ->
    application:start(test).
然后:

现在测试应用程序应该正在运行:

我还认为使用-eval标志更优雅:我还认为使用-eval标志更优雅: