[Techtalk] Joining commands together in bash
Almut Behrens
almut-behrens at gmx.net
Tue May 13 20:31:54 EST 2003
On Tue, May 13, 2003 at 03:37:52PM +0100, Conor Daly wrote:
> On Tue, May 13, 2003 at 07:29:08PM +1000 or so it is rumoured hereabouts,
> Rasjid Wilcox thought:
> >
> > I think a > was lost in line wrap-around. The original post had:
> > ... >&/dev/null
> >
> > which means redirect all output (both output to stdout and stderr) to
> > /dev/null. The & in this case is not background execution, but says 'join
> > the output from stdout and stderr together'.
>
> Oh, I thought that was csh only. The redirect syntax I use with bash is:
>
> command > /dev/null 2>&1
that's absolutely right, in principle, though bash is an exception in
that respect, in that it accepts both type of redirection idioms.
With the little test program "cmd"
#!/usr/bin/perl
print STDOUT "Output to stdout\n"; # same as print "...\n", btw.
print STDERR "Output to stderr\n";
you'd get _with bash_:
$ cmd
Output to stdout
Output to stderr
$ cmd >outfile
Output to stderr
$ cmd 2>outfile
Output to stdout
$ cmd >outfile 2>&1 # no terminal output, as expected
$ cmd >&outfile # no terminal output, as expected
On the other hand, when you want to write cross-platform compatible
code (such as install and configure scripts) it's usually a good idea
to stick with the least common denominator...
The Bourne-shell compatible shells distributed with most traditional
Unixes do not support the ">&file" syntax -- for example:
AIX:
$ cmd >&outfile
/bin/sh: outfile: bad file unit number
HP-UX:
$ cmd >&outfile
/bin/sh: outfile: Generated or received a file descriptor number that is not valid.
IRIX:
$ cmd >&outfile
/bin/sh: outfile: bad file unit number
SunOS:
$ cmd >&outfile
outfile: bad number
Almut
More information about the Techtalk
mailing list