func (c *Command) FullName() string {
	if c.commandNamePath == nil {
		return c.Name
	}
	return strings.Join(c.commandNamePath, " ")
}
FullName returns the full name of the command.
For subcommands this ensures that parent commands are part of the command path
package cli
import (
	"flag"
	"fmt"
	"sort"
	"strings"
)
type Command struct {
	Name string
	Aliases []string
	Usage string
	UsageText string
	Description string
	ArgsUsage string
	Category string
	BashComplete BashCompleteFunc
	Before BeforeFunc
	After AfterFunc
	Action ActionFunc
	OnUsageError OnUsageErrorFunc
	Subcommands []*Command
	Flags []Flag
	SkipFlagParsing bool
	HideHelp bool
	HideHelpCommand bool
	Hidden bool
	UseShortOptionHandling bool
	HelpName        string
	commandNamePath []string
	CustomHelpTemplate string
}
type Commands []*Command
type CommandsByName []*Command
func (c CommandsByName) Len() int {
	return len(c)
}
func (c CommandsByName) Less(i, j int) bool {
	return lexicographicLess(c[i].Name, c[j].Name)
}
func (c CommandsByName) Swap(i, j int) {
	c[i], c[j] = c[j], c[i]
}