Building on top of the excellent flag package from the standard library, cmdflag adds a simple way of specifying nested commands. Its intent is to blend with the usage of flag by keeping its idioms and simply augment it with commands.
go get github.com/pierrec/cmdflag
A Command is a set of flags (flag.FlagSet) with a (potentially empty) set of other Commands
(sometimes referred to as subcommands). To define a subcommand, Command.Add an Application
defining its properties:
- Name - the subcommand name
- Descr - a short desciption of the subcommand
- Args - the list of arguments expected by the subcommand
- Help - a long description of the subcommand
- Err - what to do in case of error (same as in the flag package)
- Init - the function to be run once the subcommand is encountered (lazily initialized)
Nested commands are supported, so a subcommand can also have its own subcommands.
./chef cook -toppings cheese,mushrooms pizza
c := cmdflag.New(nil)
c.Add(cmdflag.Application{
Name: "cook",
Init: func(fs *flag.FlagSet) cmdflag.Handler {
var toppings string
fs.StringVar(&toppings, "toppings", "", "coma separated list of toppings")
return func(args ...string) (int, error) {
fmt.Printf("courses: %v\n", args)
fmt.Printf("toppings: %v\n", strings.Split(toppings, ","))
return len(args), nil
}
}
}
To make life easier, a few common uses of a command line library are provided and can be easily activated:
- flags:
defining them as a flag activates them
- -version - see
VersionBoolFlag - -fullversion - see
FullVersionBoolFlag - the standard -h and -help flags are supported to display the usage of the command they apply to
- -version - see
- commands:
- help - provides a way to display
Application.Helpfor a given command (activated byCommand.AddHelp)
- help - provides a way to display
Contributions welcome via pull requests. Please provide tests.