Я использую urfave / cli для создания приложения CLI в Go.
Мне хотелось бы, чтобы параметры, заданные после первой команды, рассматривались как аргументы, а не как флаги (чтобы я мог обрабатывать их самостоятельно или передавать их в другой исполняемый файл).
При использовании app.Action
(см. Ниже), это поведение, которое я получаю, но если я использую cli.Commands
, то я получаю ошибку.
package main
import (
"fmt"
"github.com/urfave/cli"
"log"
"os"
)
func main() {
app := cli.NewApp()
app.Commands = []cli.Command{
{
Name: "test",
Action: func(c *cli.Context) error {
fmt.Println("test", c.Args())
return nil
},
},
}
app.Action = func(c *cli.Context) error {
fmt.Println(c.Args())
return nil
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
Вывод: go run main.go cmd -f flag
:
[cmd -f flag]
но go run main.go test cmd -f flag
выходит с ошибкой, где я хотел бы, чтобы он вывел
test [cmd -f flag]