// command shows how to have bash completion to an arbitrary Go program using the `complete.Command` // struct. package main import ( "flag" "fmt" "os" "github.com/posener/complete/v2" "github.com/posener/complete/v2/predict" ) var ( // Add variables to the program. name = flag.String("name", "", "Give your name") something = flag.String("something", "", "Expect somthing, but we don't know what, so no other completion options will be provided.") nothing = flag.String("nothing", "", "Expect nothing after flag, so other completion can be provided.") ) func main() { // Create the complete command. // Here we define completion values for each flag. cmd := &complete.Command{ Flags: map[string]complete.Predictor{ "name": predict.Set{"foo", "bar", "foo bar"}, "something": predict.Something, "nothing": predict.Nothing, }, } // Run the completion. cmd.Complete("command") // Parse the flags. flag.Parse() // Program logic. if *name == "" { fmt.Println("Your name is missing") os.Exit(1) } fmt.Println("Hi,", name) }