[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bugs #8211] using -i breaks xargs
From: |
James Youngman |
Subject: |
[bugs #8211] using -i breaks xargs |
Date: |
Fri, 19 Nov 2004 18:35:55 -0500 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20041007 Debian/1.7.3-5 |
This mail is an automated notification from the bugs tracker
of the project: findutils.
/**************************************************************************/
[bugs #8211] Latest Modifications:
Changes by:
James Youngman <address@hidden>
'Date:
Fri 11/19/04 at 23:19 (GMT)
What | Removed | Added
---------------------------------------------------------------------------
Status | Open | Closed
/**************************************************************************/
[bugs #8211] Full Item Snapshot:
URL: <http://savannah.gnu.org/bugs/?func=detailitem&item_id=8211>
Project: findutils
Submitted by: 0
On: Fri 03/19/04 at 15:27
Category: xargs
Severity: 5 - Average
Item Group: None
Resolution: Fixed
Privacy: Public
Assigned to: jay
Originator Name:
Originator Email:
Status: Closed
Release: 4.2.4
Fixed Release: 4.2.5
Summary: using -i breaks xargs
Original Submission: Using -i to xargs makes it stop being useful:
$ echo * | xargs echo foo | wc -l
9
$ echo * | xargs -i echo {} foo | wc -l
xargs: argument line too long
0
I understand that the point of xargs is splitting one long command in multiple
commands to avoid errors. If -i is specified, it no longer does that, so using
xargs has no advantage over executing the long command directly (and just adds
some overhead).
I guess this is the same bug that was reported to Debian's bug tracking system
in Jan 1999 (see <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=31858>),
though the report there makes it seem like the bug is not as bad as it actually
is.
Follow-up Comments
------------------
-------------------------------------------------------
Date: Mon 11/08/04 at 21:35 By: James Youngman <jay>
I have made the suggested change to the documentation (this will be included in
findutils-4.2.5). The patch is attached.
-------------------------------------------------------
Date: Sun 11/07/04 at 11:49 By: Andreas Metzler <ametzler>
aarghh, typo.
replace "only split on blanks:" with "only split on newline:"
-------------------------------------------------------
Date: Sun 11/07/04 at 11:47 By: Andreas Metzler <ametzler>
Jay writes:
> I believe that this is the behaviour of the "-i" option that > shold be
> expected. Certainly it seems consistent with the
> behaviour of xargs on Solaris.
I think you are right, POSIX/Susv3 (XSI extension) seems to support your
interpretation that -i should change xargs from splitting at <space> to only
split on blanks:
--------------------------
-I replstr
[XSI] [Option Start] Insert mode: utility is executed for each line from
standard input, taking the entire line as a single argument,[...]
--------------------------
And I'd expect -I and -i to be the same.
More supporting data:
address@hidden>uname -a
AIX login 2 5 00404A0A4C00
address@hidden>echo a b | xargs -I'{}' `pwd`/a.out X {} Y
Arg 0: [/u/user5/a9203835/a.out]
Arg 1: [X]
Arg 2: [a b]
Arg 3: [Y]
address@hidden>echo a b | xargs `pwd`/a.out X {} Y
Arg 0: [/u/user5/a9203835/a.out]
Arg 1: [X]
Arg 2: [{}]
Arg 3: [Y]
Arg 4: [a]
Arg 5: [b]
address@hidden>printf 'anbn' | xargs -I'{}' `pwd`/a.out X {} Y
Arg 0: [/u/user5/a9203835/a.out]
Arg 1: [X]
Arg 2: [a]
Arg 3: [Y]
Arg 0: [/u/user5/a9203835/a.out]
Arg 1: [X]
Arg 2: [b]
Arg 3: [Y]
---------------------
AIX's finds provides both -i and -I and both behave identically.
I suggest to update GNU findutil's documentation to _clearly_ note that '-i'
stop xargs from splitting at blanks and makes it pass _the_ complete line to
the command and /after/ that close this bug.
-------------------------------------------------------
Date: Mon 05/03/04 at 10:06 By: James Youngman <jay>
I believe that this is the behaviour of the "-i" option that shold be expected.
Certainly it seems consistent with the behaviour of xargs on Solaris.
-------------------------------------------------------
Date: Tue 03/23/04 at 05:20 By: 0 <None>
I did some further tests with the following program (C code):
main ( int argc, char **argv ) { int i; for (i = 0; i < argc; i ++) {
printf("Arg %d: [%s]n", i, argv[i]); } }
It shows that -i changes the way xargs invocates its command:
$ echo 0 1 | xargs ./test
Arg 0: [./main]
Arg 1: [0]
Arg 2: [1]
$ echo 0 1 | xargs -i ./test {}
Arg 0: [./main]
Arg 1: [0 1]
strace also confirms this. With -i xargs calls
execve("./main", ["./main", "0 1"], [/* 25 vars */])
whereas normally it calls
execve("./main", ["./main", "0", "1"], [/* 25 vars */]).
Very frustrating. :(
-------------------------------------------------------
Date: Tue 03/23/04 at 05:11 By: 0 <None>
Arg, my "nice workaround" does not really work. It triggers some other bug in
xargs' -i.
The following commands ilustrate the bug:
$ touch 0 1 ; echo * | xargs -i rm {}
rm: cannot remove `0 1': No such file or directory
Needless to say, ``xargs rm'' just works. I am just using the -i parameter in
this example to show what's broken. I don't see any reason why the above
command should fail.
There are some circunstances when the user really needs the -i option (such as
to use my workaround for the first bug) and then this second bug bites him.
Is -i really as broken as it seems (and has it been that broken since 1999,
when it seems its first bugs were reported) or am I just missing something?
-------------------------------------------------------
Date: Tue 03/23/04 at 04:27 By: 0 <None>
I found out a nice workaround:
$ echo * | xargs | xargs -i echo {} foo | wc -l
9
Still, the bug should be fixed, really fixed.
CC List
-------
CC Address | Comment
------------------------------------+-----------------------------
31858 --AT-- bugs --DOT-- debian --DOT-- org | similar report in Debian BTS
File Attachments
-------------------
-------------------------------------------------------
Date: Mon 11/08/04 at 21:35 Name: xargs-i-doc.patch Size: 2.39KB By: jay
http://savannah.gnu.org/bugs/download.php?item_id=8211&item_file_id=1853
For detailed info, follow this link:
<http://savannah.gnu.org/bugs/?func=detailitem&item_id=8211>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/