Что делает & делает в середине «exec &> / dev / null»?

Ответы:

22

Это &>не просто так &.

В bash, &>перенаправляет как стандартный выходной поток и стандартный поток ошибок где - нибудь.

Следовательно, так utility &>/dev/nullже, как utility >/dev/null 2>&1.

Команда exec &>/dev/nullперенаправляет оба выходных потока текущей оболочки /dev/null(т. Е. Отбрасывает все выходные данные скрипта с этой точки, ошибка или иное).

Соответствующая часть bashруководства:

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.                           
Кусалананда
источник
Полный не-Bash эквивалент исходного примера был быexec 2>&1 > /dev/null
trr
6
@trr Нет, это сначала перенаправит стандартную ошибку туда, куда шел стандартный вывод, а затем перенаправит стандартный вывод /dev/null(но не стандартную ошибку). Что это эквивалентно есть exec >/dev/null 2>&1. Порядок перенаправлений важен.
Кусалананда
Вы правы, я был сбит с толку
trr
1
@trr Не беспокойся.
Кусалананда