使用elixir创建命令行工具,是 http://www.elixirdose.com/post/create_command_line_tools 这个链接的正确完整版
使用mix命令行工具创建新的项目
[root@study elixir]# mix new awesome_cli
[root@study elixir]# cd awesome_cli/
修改lib/awesome_cli.ex,内容如下
[root@study awesome_cli]# cat lib/awesome_cli.ex
defmodule AwesomeCli do
def main(args) do
IO.puts "Hello, mirahs!"
end
end
修改mix.exs,增加escript定义,内容如下
[root@study awesome_cli]# cat mix.exs | grep -v "^.*#"
defmodule AwesomeCli.Mixfile do
use Mix.Project
def project do
[app: :awesome_cli,
version: "0.0.1",
elixir: "~> 1.1-rc",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
escript: escript,
deps: deps]
end
def escript do
[main_module: AwesomeCli]
end
def application do
[applications: [:logger]]
end
defp deps do
[]
end
end
编译后会在当前目录生成awesome_cli可执行文件,运行
[root@study awesome_cli]# mix escript.build
[root@study awesome_cli]# ./awesome_cli
Hello, mirahs!
下面是完整版本
[root@study awesome_cli]# cat lib/awesome_cli.ex
defmodule AwesomeCli do
def main(args) do
args |> parse_args |> do_process
end
def parse_args(args) do
options = OptionParser.parse(args)
case options do
{[name: name], _, _} -> [name]
{[help: true], _, _} -> :help
_ -> :help
end
end
def do_process([name]) do
IO.puts "Hello, #{name}! You're awesome!!"
end
def do_process(:help) do
IO.puts """
Usage:
./awesome_clie --name [your name]
Options:
--help Show this help message.
Description:
Prints out an awesome message.
"""
end
end
重新编译并运行
[root@study awesome_cli]# mix escript.build
[root@study awesome_cli]# ./awesome_cli --name mirahs
Hello, mirahs! You're awesome!!
[root@study awesome_cli]# ./awesome_cli --help
Usage:
./awesome_clie --name [your name]
Options:
--help Show this help message.
Description:
Prints out an awesome message.
项目完整文件
[root@study awesome_cli]# cd ..
[root@study elixir]# tree awesome_cli/
awesome_cli/
├── awesome_cli
├── _build
│ └── dev
│ └── lib
│ └── awesome_cli
│ └── ebin
│ ├── awesome_cli.app
│ └── Elixir.AwesomeCli.beam
├── config
│ └── config.exs
├── lib
│ └── awesome_cli.ex
├── mix.exs
├── README.md
└── test
├── awesome_cli_test.exs
└── test_helper.exs
8 directories, 9 files