What does >& mean?
Solution 1
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
Solution 2
&>
vs >&
: the preferred version is &>
(clobber)
Regarding:
&>
>&
both will clobber the file - truncate the file to 0 bytes before writing to it, just like > file
would do in the STDIN-only case.
However, the bash
manual Redirections section adds that:
Of the two forms, the first is preferred. This is semantically equivalent to
>word 2>&1
When using the second form, word may not expand to a number or
-
. If it does, other redirection operators apply (see Duplicating File Descriptors below) for compatibility reasons.
(Note: in zsh
both are equivalent.)
It's very good practice to train your fingers to use the first (&>
) form, because:
Use &>>
as >>&
is not supported by bash
(append)
There's only one append form:
The format for appending standard output and standard error is:
&>>word
This is semantically equivalent to
>>word 2>&1
(see Duplicating File Descriptors below).
Note:
- The clobber usage of
&>
over>&
in the section above is again recommended given that there is only one way for appending inbash
. -
zsh
allows both&>>
and>>&
forms.
Comments
-
contrapositive almost 2 years
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 filefilename
. But in this case the ampersand is after the greater than sign. It looks like its of the formM>&N
, whereM
andN
are file descriptors.In the snippet above, does
M=1
andN='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?
-
contrapositive almost 12 yearsI feel foolish. I spent a bunch of time reading other sources and it was right there in the manpage.
-
SourceSeeker almost 12 yearsIt goes on to say "Of the two forms, the first is preferred. This is semantically equivalent to
>word 2>&1
" -
Keith Thompson almost 12 years
>&
is the syntax used by csh and tcsh to redirect both stdout and stderr. That's probably why bash accepts it. -
geneorama about 9 yearsDoes this mean that
&>word
and>word 2>&1
are semantically equivalent? The antecedent to "This" is not clear to me. -
jordanm about 9 years@geneorama yes, that is the case. "This" in the post was referring to
>& word
though. -
geneorama about 9 yearsAh,
&>word
and>word
are nearly the same because both standard out and standard error are redirected to word. However&>word
and>word 2>&1
are exactly the same because of how they will be written to the console. -
jordanm about 9 years@geneorama
&>word
,>word 2>&1
, and>&word
are exactly the same. -
geneorama about 9 years@jordanm I was trying to point out that
>word
is different from the others. In fact, I think that>word
,1>word
, and1>word2>2
are all exactly the same. -
geneorama about 9 yearsNow I realize that I made a mistake before based on what I read elsewhere.
>
only redirects standard out.>
does not redirect error. (I should probably redirect my future comments to/dev/null
) -
Fakher Mokadem over 4 yearsso is
&
a special character that gets converted to 1 and 2 by the shell interpreter? -
Tom Hale over 4 years@FakherMokadem Nope, see the manual.
-
4t8dds about 3 yearswhat does "&" do here?
-
jordanm about 3 years@MichaelWang Nothing on it's own. it's part of the
&>
and>&
syntaxes.