命令行可运行 (CliRunnable)

Build Status Swift Version

为你的 cli 应用程序创建和解析命令行选项。帮助文档将自动为你生成。

命令行选项 (CliOption)

实现 CliRunnable 协议并提供一些命令行选项 (CliOption)。

CliOption(keys:["-o", "--option"], description:"Some Option", requiresValue:false)

这使你的命令行应用程序在执行时能够添加一些选项。

app -oapp --option

命令行选项 (CliOption):requiresValue

你可以将 requiresValue 属性设置为 true 或 false,以指定该选项是否需要值

app -o some-valueapp -o

命令行选项 (CliOption):action

设置当选项被触发时要执行的操作

public var action: ((CliOption) throws -> Void)?

命令行选项 (CliOption) 作为命令

你可以在 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

命令行选项 (CliOption):optionalArguments, requiredArguments

一个命令可以有 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 helpapp --helpapp -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

如果你想将相关的命令组合在一起以便打印帮助信息,请使用 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)

CliRunnable 结构示例

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
    }
        
}