Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Sep 2005 11:49:33 +0200
From:      Stefan Bethke <stb@lassitu.de>
To:        freebsd-standards@freebsd.org
Subject:   xargs </dev/null behaviour
Message-ID:  <E02AB45B-DC18-4FBB-A9E2-3A3E1C856A16@lassitu.de>

next in thread | raw e-mail | index | archive | help
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@lassitu.de>   Fon +49 170 346 0140




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E02AB45B-DC18-4FBB-A9E2-3A3E1C856A16>