Default usage output to stdout
If the command has not set an output explicitly everything will go to stderr. This makes a lot of sense, but is a huge PITA for people who want to be able to grep the help output. It is very common for users to want to do command --help | grep flag This patch fixes that by default help output (but not error output like an invalid command) to stdout instead of defaulting to stderr.
This commit is contained in:
parent
6264dc67e1
commit
6de96b849c
14
command.go
14
command.go
@ -79,7 +79,7 @@ func (c *Command) SetArgs(a []string) {
|
||||
c.args = a
|
||||
}
|
||||
|
||||
func (c *Command) Out() io.Writer {
|
||||
func (c *Command) getOut(def io.Writer) io.Writer {
|
||||
if c.output != nil {
|
||||
return *c.output
|
||||
}
|
||||
@ -87,10 +87,18 @@ func (c *Command) Out() io.Writer {
|
||||
if c.HasParent() {
|
||||
return c.parent.Out()
|
||||
} else {
|
||||
return os.Stderr
|
||||
return def
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Command) Out() io.Writer {
|
||||
return c.getOut(os.Stderr)
|
||||
}
|
||||
|
||||
func (c *Command) getOutOrStdout() io.Writer {
|
||||
return c.getOut(os.Stdout)
|
||||
}
|
||||
|
||||
// SetOutput sets the destination for usage and error messages.
|
||||
// If output is nil, os.Stderr is used.
|
||||
func (c *Command) SetOutput(output io.Writer) {
|
||||
@ -658,7 +666,7 @@ func (c *Command) Usage() error {
|
||||
// by the default HelpFunc in the commander
|
||||
func (c *Command) Help() error {
|
||||
c.mergePersistentFlags()
|
||||
err := tmpl(c.Out(), c.HelpTemplate(), c)
|
||||
err := tmpl(c.getOutOrStdout(), c.HelpTemplate(), c)
|
||||
return err
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user