Em shells, exec1) aberturas e redirecionamentos de arquivos 2) reais exec(substituindo a imagem do processo atual por outra imagem do processo).
Estes execs são redirecionamentos.
Primeiro, você redireciona ( exec 1> >(tee $LOGFILE)) o stdoutdescritor (1) para um canal gerado por substituição de processo conectado a um teeprocesso executado simultaneamente que tem $LOGFILEcomo primeiro argumento e, em seguida, redireciona o stderrdescritor (2) para o mesmo local em que o descritor 1agora aponta (o tee tubo).
Tendo em mente que os filedescriptors são herdados, você acabou de fazer com que todo o futuro stdoute a stderrsaída passem para o teeprocesso, que os grava no $LOGFILEe para onde quer que o filedescriptor 1 apontasse originalmente (provavelmente o seu terminal).
Nota:
O processo tee é enviado para o stdout original (= o editor de arquivo original 1) porque, como você pode aprender / pesquisar no bash (1) por expansão de comando simples e substituição de processo, a substituição do processo ( >() <()) acontece (junto com outras expansões) antes os redirecionamentos são executados, o que significa que o redirecionamento exec 1> >(tee "$LOGFILE")ocorre após o tee início, deixando teeo mesmo editor de arquivo 1 que ele herdou do shell pai. (Se fosse o contrário, teeseria feito para gravar em sua própria entrada, o que poderia torná-lo um impasse, dependendo do seu padrão de E / S).