redirecting out of a command invoked by sudo fails

Greg Woods woods at
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>  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.


More information about the users mailing list