用于创建简单命令行工具的 Swift 包
我制作这个是为了个人使用,但欢迎你使用或贡献。
有一个 Command
可以在 Cli
中运行一些参数,Cli
有它的 Output
并且包含任何定义的命令。 有关更自定义实现的示例,请参阅AETool。
创建可执行的 Swift 包并使用 Xcode 打开它
mkdir My && cd My && swift package init --type executable && xed .
编辑 Package.swift
// swift-tools-version:5.1
import PackageDescription
let package = Package(
name: "My",
products: [
.executable(name: "my", targets: ["My"])
],
dependencies: [
.package(url: "https://github.com/tadija/AECli.git", from: "0.1.0")
],
targets: [
.target(name: "My", dependencies: ["AECli"]),
]
)
编辑 Sources/My/main.swift
import AECli
// MARK: - Commands
struct Thing: Command {
var overview: String {
"does something"
}
var commands: [Command] {
[Foo(), Bar()]
}
}
struct Foo: Command {
var overview: String {
"foo something"
}
func run(_ arguments: [String] = [], in cli: Cli) throws {
cli.output("foo")
}
}
struct Bar: Command {
var overview: String {
"bar something"
}
func run(_ arguments: [String] = [], in cli: Cli) throws {
cli.output("bar")
}
}
// MARK: - Cli
SimpleCli(
overview: "my cli",
commands: [Thing()],
help: "USAGE: command [options]"
).launch()
安装
swift build -c release && install .build/release/my /usr/local/bin/my
卸载
rm /usr/local/bin/my
运行 my
my
描述带有所有可用命令的 cli
my cli
• thing > does something
USAGE: command [options]
运行 thing 命令
my thing
描述带有所有子命令的命令
does something
• foo > foo something
• bar > bar something
运行 foo 命令
my thing foo
运行 foo 命令
foo
.package(
url: "https://github.com/tadija/AECli.git", from: "0.1.0"
)
此代码在 MIT 许可证下发布。 有关详细信息,请参阅LICENSE。