C'est échanger stdout
et stderr
.
>name
signifie rediriger la sortie vers le fichier name
.
>&number
signifie rediriger la sortie vers le descripteur de fichier number
.
Donc, il &
est nécessaire de dire au shell que vous voulez dire un descripteur de fichier, pas un nom de fichier.
Un descripteur de fichier est un numéro qui fait référence à un fichier déjà ouvert. Les standards sont 0
pour l'entrée standard, 1
pour la sortie standard ou 2
pour l'erreur standard. Vous pouvez également utiliser n'importe quel autre nombre, ce qui créera un nouveau descripteur de fichier, comme lorsque vous créez une nouvelle variable avec var=value
.
Par défaut, les deux descripteurs de fichier 1
et 2
aller à /dev/tty
, de sorte que si vous exécutez somecommand 3>&1 1>&2 2>&3
dans un nouveau shell, cela ne change rien (sauf que vous avez maintenant un descripteur de fichier numéro 3).
Mais si quelque part plus tôt dans le script effectue une redirection à l'aide de exec (par exemple exec 2>error.log
), ou si le script est exécuté avec une ligne de commande incluant une redirection (par exemple ./thescript 2>error.log
), alors permuter stdout et stderr fera quelque chose.
Dans votre cas spécifique, la commande dont les options stdout et stderr sont permutées est dialog
. En regardant sa page de manuel , je vois
Some widgets, e.g., checklist, will write text to dialog's output.
Normally that is the standard error
alors, peut-être que la personne qui a écrit le script veut que dialog
le résultat soit accessible au stdout
lieu de stderr
pour une raison quelconque.
Voir aussi Ordre des redirections