En >(tee $LOG_FILE)
est un exemple de Substitution de processus Il est possible que vous souhaitiez faire une recherche à ce sujet. Scripts Shell avancés y Manuel Bash
En utilisant la syntaxe, <(program)
pour la capture des données de sortie et >(program)
pour l'alimentation, nous pouvons transmettre les données un seul enregistrement à la fois. C'est plus puissant que la substitution de commandes (backticks, ou $( )
) car il se substitue à un nom de fichier et non du texte. Par conséquent, partout où un fichier est normalement spécifié, nous pouvons le remplacer par la sortie ou l'entrée standard d'un programme (bien que la substitution de processus sur l'entrée ne soit pas très courante). Ceci est particulièrement utile lorsqu'un programme n'utilise pas de flux standard pour ce que vous voulez.
Notez que dans votre exemple, il manque un espace, exec >>(tee $LOG_FILE) 2>&1
es erroné (vous obtiendrez une erreur de syntaxe),
exec > >(tee $LOG_FILE) 2>&1
a raison, cet espace est essentiel.
Ainsi, le exec >
modifie le descripteur de fichier 1 (par défaut), également connu sous le nom de stdout
o sortie standard pour faire référence à "ce qui vient ensuite", dans ce cas il s'agit de la substitution du processus, bien que normalement il s'agisse d'un nom de fichier.
2>&1
rediriger le descripteur de fichier 2, stderr
o erreur standard pour faire référence au même endroit que le descripteur de fichier 1 (si vous omettez l'élément &
vous obtenez un fichier appelé 1
).
Une fois que vous avez fait cela, vous avez modifié la sortie standard du processus en cours, de sorte que la sortie des commandes suivantes est dirigée vers celle-ci tee
processus.