bashiofile-descriptorio-redirection

What does >& mean?


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 it's of the form M>&N, where M and N are file descriptors.

In the snippet above, do 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?


Solution

  • 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