Package: grep
Version: 2.5.3~dfsg-3
Severity: normal
% man grep | grep -nA 1 "But the exit status"
584: otherwise. But the exit status is 2 if an error occurred,
unless the
585- -q or --quiet or --silent option is used and a selected line is
found.
It's not clear what that sentence means. Up to the comma is OK, but
what follows the conjuction "unless" is confusing. It seems to be
saying that the '2' exit code somehow depends on the '-q' flag, or
perhaps that a '1' exit code takes precedence over a '2' exit code.
Test:
# do a true search with a bogus option
% echo yes | grep --fubar --quiet yes ; echo $?
grep: unrecognized option `--fubar'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
2
Apparently the '--quiet' option combined with a found line does
NOT effect the '2' exit code.
Attached is a patch for the whole paragraph.
Current:
Normally, the exit status is 0 if selected lines are found and 1
otherwise. But the exit status is 2 if an error occurred, unless the
-q or --quiet or --silent option is used and a selected line is found.
Note, however, that POSIX only mandates, for programs such as grep,
cmp, and diff, that the exit status in case of error be greater than 1;
it is therefore advisable, for the sake of portability, to use logic
that tests for this general condition instead of strict equality
with 2.
Suggested revision (attached):
The exit status is 0 if selected lines are found, and 1 if not found.
If an error occurred the exit status is 2. (Note: POSIX error handling
code should check for '2' or greater.)
Hope this helps...
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.22-2-k7 (SMP w/1 CPU core)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) (ignored: LC_ALL set to C)
Shell: /bin/sh linked to /bin/dash
Versions of packages grep depends on:
ii libc6 2.6.1-5 GNU C Library: Shared libraries
grep recommends no packages.
-- no debconf information
--- grep.1 2007-10-04 08:08:30.000000000 -0400
+++ /tmp/grep.1 2007-10-16 03:04:23.000000000 -0400
@@ -1157,23 +1157,9 @@
is not set.
.
.SH "EXIT STATUS"
-Normally, the exit status is 0 if selected lines are found and 1 otherwise.
-But the exit status is 2 if an error occurred, unless the
-.B \-q
-or
-.B \-\^\-quiet
-or
-.B \-\^\-silent
-option is used and a selected line is found.
-Note, however, that \s-1POSIX\s0 only mandates, for programs such as
-.BR grep ,
-.BR cmp ,
-and
-.BR diff ,
-that the exit status in case of error be greater than 1;
-it is therefore advisable, for the sake of portability,
-to use logic that tests for this general condition
-instead of strict equality with\ 2.
+The exit status is 0 if selected lines are found, and 1 if not found.
+If an error occurred the exit status is 2. (Note: POSIX error
+handling code should check for '2' or greater.)
.
.SH COPYRIGHT
Copyright \(co