Closed
Description
If you name a cli.Command
the same as another cli.Command
only one of them will execute with no error or warning that there is also a duplicate command by the same name and with an exit code of 0
. Consider the following:
import (
"fmt"
"log"
"os"
"github.com/urfave/cli"
)
func main() {
app := cli.NewApp()
app.Commands = []cli.Command{
// This is the only command that WILL execute since it is the first "foo" command found
cli.Command{
Action: func(c *cli.Context) { fmt.Println("foo1") }, // Print "foo1"
Name: "foo", // Name is "foo"
},
// This command will NEVER execute since it is the second "foo" match in the array
cli.Command{
Action: func(c *cli.Context) { fmt.Println("foo2") }, // Print "foo2"
Name: "foo", // Name is ALSO "foo"
},
}
app.Name = "test"
if err := app.Run(os.Args); err != nil {
log.Fatalf("An error occurred: %s", err)
}
}
Running this code yields the following output:
$ go run test.go foo
foo1
$ echo $?
0
Suggest checking all cli.Command
s for any duplicates and exiting with a message and non-zero exit code or running all cli.Command
s that match the cli.Command.Name
field.
gist link: https://gist.github.com/johnwyles/3129a05391e1f749c661b1efc98abc67