[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#34347: At least add 2nd comm error message after output
From: |
Pádraig Brady |
Subject: |
bug#34347: At least add 2nd comm error message after output |
Date: |
Sat, 9 Feb 2019 11:20:49 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 |
On 06/02/19 04:16, 積丹尼 Dan Jacobson wrote:
> (info "(coreutils) comm invocation")
>
> "Before ‘comm’ can be used, the input files must be sorted"
> ^^^^
> "If an input file is diagnosed as being unsorted, the ‘comm’ command
> will exit with a nonzero status (and the output should not be used).
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> "Forcing ‘comm’ to process wrongly sorted input files ... is not
> guaranteed to produce any particular output. The output will probably
> not correspond with whatever you hoped it would be."
>
> OK, so I would change the default.
>
> The new default should be: before producing even a line of output,
> check both files. If either of them is in order, print the error
> message, and exit non-zero... _without any line of output!_
>
> Because currently,
>
> $ seq 55 > 5
> $ seq 55 |tac > 5r
> $ comm 5 5r
> just causes the error messages to fly off the screen, leaving only the
> savvy user, who checks exit values, to have any inkling that there is a
> problem, and he should not order futher warships, airplanes, etc. based
> on the results after all.
>
> OR, be so kind as to add a second error message after all the output is
> printed, so it won't fly off the screen.
This is a fair point.
Note the --check-order option is stricter and will exit upon the first error
message.
join has the same considerations, so this should handle both:
cheers,
Pádraig
diff --git a/src/comm.c b/src/comm.c
index da8d5cf..6f46c98 100644
--- a/src/comm.c
+++ b/src/comm.c
@@ -493,7 +493,7 @@ main (int argc, char **argv)
compare_files (argv + optind);
if (issued_disorder_warning[0] || issued_disorder_warning[1])
- return EXIT_FAILURE;
+ error (EXIT_FAILURE, 0, _("input is not in sorted order"));
else
return EXIT_SUCCESS;
}
diff --git a/src/join.c b/src/join.c
index 7c75c76..e2ba02b 100644
--- a/src/join.c
+++ b/src/join.c
@@ -1193,7 +1193,7 @@ main (int argc, char **argv)
die (EXIT_FAILURE, errno, "%s", quotef (g_names[1]));
if (issued_disorder_warning[0] || issued_disorder_warning[1])
- return EXIT_FAILURE;
+ error (EXIT_FAILURE, 0, _("input is not in sorted order"));
else
return EXIT_SUCCESS;
}