xargs </dev/null behaviour
Stefan Bethke
stb at lassitu.de
Thu Sep 1 09:49:37 GMT 2005
I've stumbled over the differing behavior of xargs when standard
input delivers an immediate end of file:
In recent versions of FreeBSD and OpenBSD, I get this:
$ xargs echo foo </dev/null
$
On Solaris and Linux, I get this:
$ xargs echo foo </dev/null
foo
$
Carefully reading the SUSv3 man page (the Solaris 10 one has very
similar wordage), the Solaris/Linux behaviour seems to be correct:
> The xargs utility shall construct a command line consisting of the
> utility and argument operands specified followed by as many
> arguments read in sequence from standard input as fit in length and
> number constraints specified by the options. The xargs utility
> shall then invoke the constructed command line and wait for its
> completion. This sequence shall be repeated [...]
I personally prefer the BSD behaviour, but I wonder whether anyone
might rely on the SUSv3 behavior?
I came across a makefile that assumed BSD behavior, but failed:
find . -name "*.orig" | xargs rm
because no orig files were found, but rm was executed anyway, with
zero arguments.
Stefan
--
Stefan Bethke <stb at lassitu.de> Fon +49 170 346 0140
More information about the freebsd-standards
mailing list