J'ai vu cette ligne dans un script:
DEVICE=`dialog --inputbox "Festplatten-Laufzeit auslesen. Gebe Sie das
gewünschte Device an: " 0 70 "" 3>&1 1>&2 2>&3`
Quel est
3>&1 1>&2 2>&3
Faire? Je sais que 1 = stdout et 2 = stderr, mais quels sont le 3
et le &
pour?
Réponses:
Les nombres sont des descripteurs de fichier et seules les trois premières (commençant par zéro) ont une signification normalisée:
Ainsi, chacun de ces numéros dans votre commande fait référence à un descripteur de fichier. Vous pouvez soit rediriger un descripteur de fichier vers un fichier avec,
>
soit le rediriger vers un autre descripteur de fichier avec>&
La
3>&1
dans votre ligne de commande va créer un nouveau descripteur de fichier et le rediriger vers ce1
qui estSTDOUT
. Maintenant1>&2
, redirige le descripteur de fichier 1 versSTDERR
et2>&3
redirigera le descripteur de fichier 2 vers 3 qui estSTDOUT
.Donc, fondamentalement, vous avez basculé
STDOUT
etSTDERR
voici les étapes à suivre:Maintenant, si le programme imprime quelque chose dans le descripteur de fichier 1, il sera imprimé dans le descripteur de fichier 2 et inversement.
la source
C'est échanger
stdout
etstderr
.>name
signifie rediriger la sortie vers le fichiername
.>&number
signifie rediriger la sortie vers le descripteur de fichiernumber
.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 ou2
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 avecvar=value
.Par défaut, les deux descripteurs de fichier
1
et2
aller à/dev/tty
, de sorte que si vous exécutezsomecommand 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 voisalors, peut-être que la personne qui a écrit le script veut que
dialog
le résultat soit accessible austdout
lieu destderr
pour une raison quelconque.Voir aussi Ordre des redirections
la source
Le scénariste a défini fd 3 tel que:
Ouvrez "File.txt" et affectez-lui le dossier 3. Descripteurs de fichier maximum: 255
Lire seulement 4 caractères.
Écrivez un point décimal ici.
Fermer fd 3.
==> 1234.67890
la source