如何将命令行参数传递给 mix run --no-halt

dra*_*ayl 4 elixir-mix elixir elixir-iex erlang-supervisor

所以我有一个遵循以下布局的应用程序模块:

defmodule Project.Application do


  use Application

  def start(_type, _args) do
    children = [
      randomchild1,
      randomchild2,
      {Project.runapp, "argument" }
    ]

    opts = [strategy: :one_for_all, name: Project.Supervisor]
    Supervisor.start_link(children, opts)
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,当我运行它时,我使用它mix run --no-halt并且运行完美。

我想用在命令行中传递的值替换“参数”?我不知道如何向mix run --no-halt.

我想做的就是将一个值传递给 start 方法并使用它来定义子进程。

Ale*_*kin 6

mix 自行重置 System.argv/1。该--no-halt选项是运行应用程序的临时方式;通常我们用 来组装发行版mix release并用 来正常启动它们ebin/my_app start

\n\n

虽然您仍然想求助于mix run --no-halt,但创建空文件(mix将尝试在启动时执行它)并mix调用

\n\n
mix run --no-halt -- "empty.exs" 42\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在在你的内部Application.start/2你可以得到争论System.argv/0

\n\n
def start(_type, args) do\n  IO.inspect(System.argv())\n\n  ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

核实。

\n\n
mix run --no-halt -- "empty.exs" 42\n#\xe2\x87\x92 ["422"]    \n
Run Code Online (Sandbox Code Playgroud)\n