O que o & faz no meio de "exec &> / dev / null"?

Respostas:

22

Não é &>&.

Em bash, &>redireciona o fluxo de saída padrão e o fluxo de erro padrão para algum lugar.

Portanto, utility &>/dev/nullé o mesmo que utility >/dev/null 2>&1.

O comando exec &>/dev/nullredireciona os dois fluxos de saída do shell atual para /dev/null(ou seja, descarta toda a saída do script a partir desse ponto, erro ou outro).

A parte relevante do bashmanual:

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.                           
Kusalananda
fonte
O equivalente não Bash completo do exemplo original seriaexec 2>&1 > /dev/null
trr 29/06
6
@trr Não, isso redirecionaria primeiro o erro padrão para onde quer que fosse a saída padrão e depois a saída padrão para /dev/null(mas não o erro padrão). O que é equivalente é exec >/dev/null 2>&1. A ordem dos redirecionamentos é importante.
Kusalananda
Você está certo, eu estava confuso
trr
1
@trr Não se preocupe.
Kusalananda