为你的 cli 应用程序创建和解析命令行选项。帮助文档将自动为你生成。
实现 CliRunnable 协议并提供一些命令行选项 (CliOption)。
CliOption(keys:["-o", "--option"], description:"Some Option", requiresValue:false)
这使你的命令行应用程序在执行时能够添加一些选项。
app -o
或 app --option
你可以将 requiresValue 属性设置为 true 或 false,以指定该选项是否需要值
app -o some-value
或 app -o
设置当选项被触发时要执行的操作
public var action: ((CliOption) throws -> Void)?
你可以在 requiredArguments 和 optionalArguments 数组中添加子选项,以创建一个命令以及该命令的附加选项
var command = CliOption(keys:["custom-command"], description:"Custom Command", requiresValue:false)
let option = CliOption(keys:["-o", "--option"], description:"Some Option", requiresValue:false)
command.add(argument: option, required: false)
app custom-command --option
一个命令可以有 optionalArguments 或 requiredArguments
let secondaryOption = CliOption(keys:["-a", "--alternate-option"], description:"Alternate Option", requiresValue:true)
command.add(argument: option, required: true)
app custom-command --alternate-option my-required-value
帮助命令会从 CliOptions 和 CliOptionGroups 自动创建
app help
或 app --help
或 app -h
或不带任何选项 app
App Description
app COMMAND [OPTIONS]
Custom Commands:
custom-command Do something custom
app custom-command help
app custom-command [OPTIONS]
Custom Command
-o, --option Some Option
-a, --alternate-option Alternate Option
如果你想将相关的命令组合在一起以便打印帮助信息,请使用 CliOptionGroup
var psCommand = CliOption(keys:["ps"], description:"Process Status", requiresValue:false)
var lsCommand = CliOption(keys:["ls"], description:"List Directory Contents", requiresValue:false)
CliOptionGroup(description:"BSD General Commands:", options: [psCommand, lsCommand])
var sshCommand = CliOption(keys:["ssh"], description:"OpenSSH SSH client (remote login program)")
var scpCommand = CliOption(keys:["sap"], description:"Secure copy (remote file copy program)")
CliOptionGroup(description:"SSH Commands:", options: [sshCommand, scpCommand])
app --help
App Description
app COMMAND [OPTIONS]
BSD General Commands:
ps Process Status
ls List Directory Contents
SSH Commands:
ssh OpenSSH SSH client (remote login program)
scp Secure copy (remote file copy program)
struct App : CliRunnable {
var description: String? = "App Description\n"
let appUsage = "app COMMAND [OPTIONS]\n"
let customCommandUsage = "app custom-command [OPTIONS]\n"
//prepare your commands and options
var command = CliOption(keys:["custom-command"], description:"Do something custom", requiresValue:false)
let option = CliOption(keys:["-o", "--option"], description:"Some Option", requiresValue:false)
let secondaryOption = CliOption(keys:["-a", "--alternate-option"], description:"Alternate Option", requiresValue:true)
var group = CliOptionGroup(description:"Commands Group:")
public init(){
//add your options and to groups
command.add(argument: option)
command.add(argument: secondaryOption, required: true)
group.options.append(command)
cliOptionGroups = [group]
}
public var cliOptionGroups: [CliOptionGroup]
public func usage(option: CliOption?) -> String? {
return option != nil ? customCommandUsage : appUsage
}
}