Was macht & in der Mitte von "exec &> / dev / null"?

Antworten:

22

Es ist &>nicht nur so &.

In bash, &>leitet sowohl die Standardausgabe und die Standardfehlerstrom irgendwo.

Daher utility &>/dev/nullist das gleiche wie utility >/dev/null 2>&1.

Der Befehl exec &>/dev/nullleitet beide Ausgabestreams der aktuellen Shell um /dev/null(dh er verwirft alle Ausgaben des Skripts ab diesem Zeitpunkt, fehlerhaft oder auf andere Weise).

Der relevante Teil des bashHandbuchs:

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
quelle
Das vollständige Non-Bash-Äquivalent des ursprünglichen Beispiels wäreexec 2>&1 > /dev/null
bis zum
6
@trr Nein, das würde zuerst den Standardfehler dorthin umleiten, wo immer die Standardausgabe hingeht, und dann die Standardausgabe dorthin umleiten /dev/null(aber nicht den Standardfehler). Was es entspricht, ist exec >/dev/null 2>&1. Die Reihenfolge der Weiterleitungen ist wichtig.
Kusalananda
Sie haben Recht, ich war verwirrt
vom
1
@trr Keine Sorge.
Kusalananda