From 6de96b849c2b94c84e613eabbefe087e495ae787 Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Wed, 18 Mar 2015 11:16:12 -0400 Subject: [PATCH] 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. --- command.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/command.go b/command.go index 7285d10b..f1c1b742 100644 --- a/command.go +++ b/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 }