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