Vi esta línea en un guión:
DEVICE=`dialog --inputbox "Festplatten-Laufzeit auslesen. Gebe Sie das
gewünschte Device an: " 0 70 "" 3>&1 1>&2 2>&3`
Que es
3>&1 1>&2 2>&3
¿haciendo? Sé que 1 = stdout y 2 = stderr, pero ¿para qué sirven 3y ¶ qué?

Respuestas:
Los números son descriptores de archivo y solo los primeros tres (comenzando con cero) tienen un significado estandarizado:
Por lo tanto, cada uno de estos números en su comando se refiere a un descriptor de archivo. Puede redirigir un descriptor de archivo a un archivo con
>o redirigirlo a otro descriptor de archivo con>&El
3>&1en su línea de comando creará un nuevo descriptor de archivo y lo redirigirá a1cuál esSTDOUT. Ahora1>&2redirigirá el descriptor de archivo 1STDERRy2>&3redirigirá el descriptor de archivo 2 a 3, que esSTDOUT.Así que básicamente cambiaste
STDOUTySTDERRestos son los pasos:Ahora, si el programa imprime algo en el descriptor de archivo 1, se imprimirá en el descriptor de archivo 2 y viceversa.
fuente
Está intercambiando
stdoutystderr.>namesignifica redirigir la salida al archivoname.>&numbersignifica redirigir la salida al descriptor de archivonumber.Por lo tanto,
&se necesita para decirle al shell que quiere decir un descriptor de archivo, no un nombre de archivo.Un descriptor de archivo es un número que se refiere a un archivo ya abierto. Los estándares son
0para entrada estándar,1para salida estándar o2para error estándar. También puede usar cualquier otro número, que creará un nuevo descriptor de archivo, al igual que cuando crea una nueva variable convar=value.Por defecto, tanto el descriptor de archivo
1como el de2ir a/dev/tty, por lo que si se ejecutasomecommand 3>&1 1>&2 2>&3en un nuevo shell, no cambia nada (excepto que ahora tiene un descriptor de archivo número 3).Pero si en algún lugar anterior en el script hace una redirección usando exec (por ejemplo
exec 2>error.log), o el script se ejecuta con una línea de comando que incluye la redirección (por ejemplo./thescript 2>error.log), entonces intercambiar stdout y stderr hará algo.En su caso específico, el comando que tiene sus stdout y stderr intercambiados es
dialog. Mirando su página de manual , veoEntonces, tal vez la persona que escribió el guión quiere
dialogque vaya a la salida enstdoutlugar destderrpor alguna razón.Ver también Orden de redireccionamientos
fuente
El guionista definió fd 3 como:
Abra "File.txt" y asígnele fd 3. Descriptores máximos de archivo: 255
Lee solo 4 caracteres.
Escribe un punto decimal allí.
Cerrar fd 3.
==> 1234.67890
fuente