Que fait et fait au milieu de «exec &> / dev / null»?

Réponses:

22

Ce n'est &>pas juste &.

Dans bash, &>redirige quelque part le flux de sortie standard et le flux d'erreur standard.

Par conséquent, utility &>/dev/nullest le même que utility >/dev/null 2>&1.

La commande exec &>/dev/nullredirige les deux flux de sortie du shell actuel vers /dev/null(c'est- à -dire qu'elle supprime toutes les sorties du script à partir de ce moment, erreur ou autre).

La partie pertinente du bashmanuel:

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
la source
L'équivalent non-Bash complet de l'exemple original seraitexec 2>&1 > /dev/null
2017
6
@trr Non, cela redirigerait d'abord l'erreur standard vers la sortie standard, puis redirigerait la sortie standard vers /dev/null(mais pas l'erreur standard). Ce que cela équivaut à exec >/dev/null 2>&1. L'ordre des redirections est important.
Kusalananda
Tu as raison, j'étais confus
trr
1
@trr Pas de soucis.
Kusalananda