2016-04-25 10 views
2

Bei der Einstellung Aliase wie:Elixir: Aliase Mix, zwei `run` Aufgaben in einem Alias ​​

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

Das Ergebnis mix test_run

$ mix test_run 
One 
Two 

sein sollte, aber es führt nur die erste Aufgabe und Drucke

$ mix test_run 
One 

Nicht sicher, ob es das Verhalten bestimmt wird, aber vor ein Problem stellen sie sicher, ich machen wollte. Hier ist das Repository, um den Fehler zu reproduzieren: https://github.com/wende/mix_run_twice

+0

Ich bin mir auch nicht sicher, ob es beabsichtigt ist, aber selbst das zweimalige Ausführen von 'run' in' mix do' funktioniert nicht: 'MIX_DEBUG = 1 mix do -ne 'i.puts (" one ") , run -e 'IO.puts ("zwei")' ' – tkowal

Antwort

3

Mix erlaubt nicht, eine Aufgabe zweimal ausgeführt werden. Sie können jedoch Mix.Task.reenable/1 verwenden, um es erneut auszuführen.

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

Sie müssen die Aufgabe am Ende des ersten run reaktivieren sonst wird es nie auf die zweite Aufgabe bekommen. Sie können nicht so etwas wie tun:

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

würde ich eine benutzerdefinierte Mischung Aufgabe vorschlagen machen die Mix.Task.run/2 für jede Aufgabe ruft Sie ausführen möchten, Neuaktivieren wie Sie gehen. Elixir 1.3 erleichtert dies, indem es eine rerun/2-Funktion bereitstellt, die die reenable und run für eine Aufgabe ausführt. https://github.com/elixir-lang/elixir/pull/4394

+0

Es scheint die einzige Lösung für jetzt zu sein. Aber es sieht eher nach einem Weg um das Problem aus –