Elixir:在一个别名中混合别名,两个`run`任务

时间:2016-04-25 16:25:15

标签: elixir mix

设置如下的别名:

defp aliases do
    [
      test_run: ["run -e 'IO.puts(\"One\")'", "run -e 'IO.puts(\"Two\")'"]
    ]
end

mix test_run的结果应为

$ mix test_run
One
Two

但它只执行第一项任务并打印

$ mix test_run
One

不确定它是否是预期的行为,但在提出问题之前我想确定一下。 这是重现错误的存储库: https://github.com/wende/mix_run_twice

1 个答案:

答案 0 :(得分:3)

Mix不允许任务运行两次。但是,您可以使用Mix.Task.reenable/1再次运行它。

  test_run: ["run -e 'IO.puts(\"One\"); Mix.Task.reenable(:run)'", "run -e 'IO.puts(\"Two\")'"]

您必须在第一个run结束时重新启用该任务,否则它将永远不会进入第二个任务。你不能做类似的事情:

 ["run -e 'IO.puts(\"One\")'", "run -e 'Mix.Task.reenable(:run)'"]

我建议您制作一个自定义组合任务,为您要运行的每项任务调用Mix.Task.run/2,然后重新启用。 Elixir 1.3通过提供rerun/2函数来完成任务的reenablerun,从而简化了这一过程。 https://github.com/elixir-lang/elixir/pull/4394