私はカスタムミックスタスクの中からミックスタスクを実行したいと思います。ミックスタスクからミックスタスクを実行するにはどうすればよいですか?
def run(_) do
Mix.Shell.cmd("mix edeliver build release")
#do other stuff
のようなものしかし、私はシェルコマンドを実行する方法を見つけ出すことはできません。簡単な方法があれば(ただbashスクリプトを作る以外に)、私に教えてください。
私はカスタムミックスタスクの中からミックスタスクを実行したいと思います。ミックスタスクからミックスタスクを実行するにはどうすればよいですか?
def run(_) do
Mix.Shell.cmd("mix edeliver build release")
#do other stuff
のようなものしかし、私はシェルコマンドを実行する方法を見つけ出すことはできません。簡単な方法があれば(ただbashスクリプトを作る以外に)、私に教えてください。
シェルはここでは冗長リンクです。あなたがedeliver
タスクを実行したい場合は、Mix.Tasks.Edeliver#run
を実行します。
def run(_) do
Mix.Tasks.Edeliver.run(~w|build release|)
# do other stuff
私は別のミックスタスク内からMix.shell.cmd
経由ミックスタスクを実行しようとしたことがないと私はそれが最善の方法だ場合、あなたが目指しているもののようなものがうまくいくように、それはそうわからないものの:
def run(args) do
Mix.Shell.cmd("mix test", fn(output) -> IO.write(output) end)
# (...)
end
上記のコードは、mix test
でテストを実行し、出力を出力します。注:上記のコードはMix 1.3.4に基づいていますが、インターフェイスは1.4.0ではわずかに異なります。
# inside mix.exs
def project do
[
# (...)
aliases: [
"composite.task": [
"test",
"edeliver build release",
"my.custom.task",
]
]
]
end
今mix composite.task
を実行している2つを実行する必要があります。よりエレガントなアプローチはしかし、「複合」タスクのmix aliasを作成するあなたが依存するタスクからなる、カスタム1にされるだろう可能性がありますどのような
my.custom.task
の前に他のタスク。
シェルCOMANDを実行するために、あなたがLokiを使用することができます。シェル実行の関数は、execute/1
です。
そして例:
defmodule Mix.Tasks.Sesamex.Gen.Auth do
use Mix.Task
import Loki.Cmd
import Loki.Shell
@spec run(List.t) :: none()
def run([singular, plural]) do
execute("mix sesamex.gen.model #{singular} #{plural}")
execute("mix sesamex.gen.controllers #{singular}")
execute("mix sesamex.gen.views #{singular}")
execute("mix sesamex.gen.templates #{singular}")
execute("mix sesamex.gen.routes #{singular}")
# ...
end
end
それとも、それがコマンドを実行する方法を見て:
@spec execute(String.t, list(Keyword.t)) :: {Collectable.t, exit_status :: non_neg_integer}
def execute(string, opts) when is_bitstring(string) and is_list(opts) do
[command | args] = String.split(string)
say IO.ANSI.format [:green, " * execute ", :reset, string]
System.cmd(command, args, env: opts)
end
は、それはあなたを助ける願っています。