From: David Laight <david.laight.linux@gmail.com>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: Dmitri Seletski <drjoms@gmail.com>, netdev@vger.kernel.org
Subject: Re: "ip help" output is an error
Date: Mon, 22 Jun 2026 08:49:25 +0100 [thread overview]
Message-ID: <20260622084925.6f3dfc4f@pumpkin> (raw)
In-Reply-To: <20260621082105.1196ef72@phoenix.local>
On Sun, 21 Jun 2026 08:21:05 -0700
Stephen Hemminger <stephen@networkplumber.org> wrote:
> On Sat, 20 Jun 2026 10:36:31 +0100
> Dmitri Seletski <drjoms@gmail.com> wrote:
>
> > Hello iproute2 maintainers,
> >
> > I am reporting an inconsistency regarding the exit status of the ip help
> > command.
> >
> > Current Behavior:
> > When running ip help, the command prints the help documentation to
> > stdout, but exits with a non-zero status (error). This causes issues in
> > shell scripts that rely on exit codes for control flow.
> >
> > Steps to reproduce:
> > bash
> >
> > # This returns "FAIL" because the exit code is non-zero
> > if ip help > /dev/null; then
> > echo "SUCCESS"
> > else
> > echo "FAIL"
> > fi
> >
> > Expected Behavior:
> > Since the command successfully performs the requested task (displaying
> > help information) and does not encounter a system error, it should
> > return an exit code of 0.
> >
> > Context:
> > This behavior breaks standard Bash logic for automation. For example:
> > ip help && echo "This will not execute"
> >
> > "ip help |grep br" - this will bring no result.
> >
> > Current version tested: iproute2-6.19.0
> >
> > Thank you for your time and for maintaining this tool.
> >
> > Regards,
> > Dmitri Seletski
> >
> >
>
> Yes iproute2 doesn't do a great job of handling error codes
> with usage vs help. Its a bug and no one has bothered to fix it.
>
The version I've got does write(2, "Usage...", 972); exit(-1);
Changing it to do write(1, ...) is likely to break scripts, and making
it do exit(0) is likely cause new scripts to fail on old systems.
The 'grep' works fine if you redirect stderr to stdout.
The exit(-1) is a bug; the parameter is only 8 bits and the high bit
is expected to be used to indicate abnormal termination (eg by a signal).
That should probably be changed to exit(1), there doesn't seem to be
a standard way to differentiate between command line errors and
operational ones.
David
prev parent reply other threads:[~2026-06-22 7:49 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-20 9:36 "ip help" output is an error Dmitri Seletski
2026-06-21 15:21 ` Stephen Hemminger
2026-06-21 21:51 ` Dmitri Seletski
2026-06-22 7:49 ` David Laight [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260622084925.6f3dfc4f@pumpkin \
--to=david.laight.linux@gmail.com \
--cc=drjoms@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox