diff --git a/bash_completions.go b/bash_completions.go index ab428ccb8..a4953fd08 100644 --- a/bash_completions.go +++ b/bash_completions.go @@ -495,9 +495,9 @@ func writeFlag(buf *bytes.Buffer, flag *pflag.Flag, cmd *Command) { func writeLocalNonPersistentFlag(buf *bytes.Buffer, flag *pflag.Flag) { name := flag.Name - format := " local_nonpersistent_flags+=(\"--%s" + format := " local_nonpersistent_flags+=(\"--%[1]s" if len(flag.NoOptDefVal) == 0 { - format += "=" + format += "\")\n local_nonpersistent_flags+=(\"--%[1]s=" } format += "\")\n" buf.WriteString(fmt.Sprintf(format, name)) @@ -535,7 +535,9 @@ func writeFlags(buf *bytes.Buffer, cmd *Command) { if len(flag.Shorthand) > 0 { writeShortFlag(buf, flag, cmd) } - if localNonPersistentFlags.Lookup(flag.Name) != nil { + // localNonPersistentFlags are used to stop the completion of subcommands when one is set + // if TraverseChildren is true we should allow to complete subcommands + if localNonPersistentFlags.Lookup(flag.Name) != nil && !cmd.Root().TraverseChildren { writeLocalNonPersistentFlag(buf, flag) } })