What does & do in the middle of "exec &>/dev/null"?

7,731

It's &>, not just &.

In bash, &> redirects both the standard output stream and the standard error stream somewhere.

Hence, utility &>/dev/null is the same as utility >/dev/null 2>&1.

The command exec &>/dev/null redirects both output streams of the current shell to /dev/null (i.e. it discards all output of the script from that point on, error or otherwise).

The relevant part of the bash manual:

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         
   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.                           
Share:
7,731

Related videos on Youtube

William Ross
Author by

William Ross

Updated on September 18, 2022

Comments

  • William Ross
    William Ross over 1 year

    My command is:

    exec &>/dev/null
    

    What does this & and full command do here? I know it is being redirected to the bit-bucket.

  • trr
    trr almost 7 years
    The complete non-Bash equivalent of the original example would be exec 2>&1 > /dev/null
  • Kusalananda
    Kusalananda almost 7 years
    @trr No, that would first redirect standard error to wherever standard output went, and then redirect standard output to /dev/null (but not standard error). What it's equivalent to is exec >/dev/null 2>&1. The order of the redirections is important.
  • trr
    trr almost 7 years
    You're right, I was confused
  • Kusalananda
    Kusalananda almost 7 years
    @trr No worries.