コマンドラインの引数を得る方法

Elixirでコマンドラインツールを書く方法が(自分の観測範囲内では)二通りある。

一つはスクリプトとして実行する方法。もう一つは、escript を使う方法(こっちの方法も名前からするとスクリプトとして実行されてるっぽいけど)。

スクリプトとして実行した場合、System.argv/0 を使えばいつでもコマンドに渡された引数を得ることができるけれど、escript を使った場合は System.argv は nil を返してくる。

ということのメモ。

スクリプトとして実行した場合

ソース

defmodule RunScript do
    def go(argv) do
        IO.inspect argv
        IO.inspect System.argv
    end
end

RunScript.go(System.argv)

実行

$ elixir run_script.exs one two three
["one", "two", "three"]
["one", "two", "three"]

escriptを使った場合

ソース

defmodule RunEscript do
    def main(argv) do
        IO.inspect argv
        IO.inspect System.argv
    end
end

実行

$ ./run_escript one two three
["one", "two", "three"]
nil

参考

escript を使った書き方は以下のページを参考にした。