Hi James,
On 7/6/26 22:06, James Youngman wrote:
* doc/find.texi: Point out that xargs does not launch commands via the
shell and does not use the "128 + signal" convention used for $? in
the shell.
* xargs/xargs.1: Likewise.
---
doc/find.texi | 5 +++--
xargs/xargs.1 | 8 ++++++--
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/doc/find.texi b/doc/find.texi
index f693db8c..71b80f53 100644
--- a/doc/find.texi
+++ b/doc/find.texi
@@ -3996,9 +3996,10 @@ if the command is not found
if some other error occurred.
@end table
-Exit codes greater than 128 are used by the shell to indicate that
-a program died due to a fatal signal.
+The commands run by @code{xargs} are not invoked via the shell. The
+shell's @math{128 + n} convention for reporting that a process had
+been killed by a signal is not used by @code{xargs}.
While this is correct and, well, describes what xargs does _not_ do,
I think the confusion of the recent bug report stems from the following row
of the table with the exit codes:
125 if any invocation of the command exited with status 1-125
_______________________________________________________________^^^
This is not the complete range:
for f in $(seq 120 130); do echo $f | xargs -I'{}' sh -c 'set -x; exit "{}"'
sh; echo $?; done
+ exit 120
123
+ exit 121
123
+ exit 122
123
+ exit 123
123
+ exit 124
123
+ exit 125
123
+ exit 126
123
+ exit 127
123
+ exit 128
123
+ exit 129
123
+ exit 130
123
The practical range for exit is 0-255.
And xargs(1) itself exits with 123 for all command exit values in 1..254.
Only 0 and 255 are treated different.
# For all command exit codes, find the ones which make xargs(1) not exit with
123.
# Finally demonstrate that 256 overflows to 0 (in the shell process, not in
xargs).
for f in $(seq 0 256); do \
echo $f | xargs -I'{}' sh -c 'exit "{}"' sh; \
ret=$?; \
test $ret != 123 \
&& echo "$f -> $ret"; \
done
0 -> 0
xargs: sh: exited with status 255; aborting
255 -> 124
256 -> 0
Therefore, the documentation fix would be:
- 125 if any invocation of the command exited with status 1-125
+ 125 if any invocation of the command exited with status 1-254
WDYT?
Have a nice day,
Berny