redirecting out of a command invoked by sudo fails

Greg Woods woods at ucar.edu
Fri Jun 25 21:51:02 UTC 2010


On Fri, 2010-06-25 at 12:33 -0700, JD wrote:
> 
> On 06/25/2010 12:04 PM, Bill Crawford was caught red-handed while writing::
> > On 25 June 2010 19:38, JD<jd1008 at gmail.com>  wrote:
> >    
> >> cd /var/lib
> >> sudo tar cjf - rpm>  rpm.tar.bz2
> >> sh: rpm.tar.bz2: cannot create [Permission denied]
>  sudo only runs the "tar" command; the redirect (>) is
> > done by the shell, and since you aren't root, you can't write in
> > /var/lib.

The classic example to illustrate this is:

$ cat a b > a

This is supposed to append b to a, but what actually happens is that the
redirection truncates a first, and you wind up with a copy of b in a and
the original contents of a are lost (do not ask how I learned this; the
answer is "the hard way" )-:

$ cat b >> a

is the right way to do that.

In both of these cases, the problem is that the shell does the
redirection first before executing the commands.

--Greg




More information about the users mailing list