What does >& mean?

contrapositive picture contrapositive · Jun 29, 2012 · Viewed 30.5k times · Source

I was a little confused by this expression:

gcc -c -g program.c >& compiler.txt

I know &>filename will redirect both stdout and stderr to file filename. But in this case the ampersand is after the greater than sign. It looks like its of the form M>&N, where M and N are file descriptors.

In the snippet above, does M=1 and N='compiler.txt'? How exactly is this different from:

gcc -c -g program.c > compiler.txt     (ampersand removed)

My understanding is that each open file is associated with a file descriptor greater than 2. Is this correct?

If so, is a file name interchangeable with its file descriptor as the target of redirection?

Answer

jordanm picture jordanm · Jun 29, 2012

This is the same as &>. From the bash manpage:

Redirecting Standard Output and Standard Error This construct allows both the standard output (file descriptor 1) and the standard error output (file descriptor 2) to be redirected to the file whose name is the expansion of word.

There are two formats for  redirecting  standard  output  and  standard
error:

       &>word
and
       >&word

Of the two forms, the first is preferred.  This is semantically equiva-
lent to

       >word 2>&1