2

设置别名时,例如:

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

4

1 回答 1

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

于 2016-04-26T07:31:21.340 回答