Respuestas:
Si usted es un programador en C, puede pensar &1que "la dirección de 1" 2>&1lee "redirige el descriptor de archivo # 2 al mismo lugar que el # 1".
"Dos a uno" ("a" ser >) tiene más sentido lógico para mí que "Dos a uno", que es con lo que generalmente podría confundirlo. Si considera "y uno" como un solo sustantivo (un lugar), también tiene sentido gramatical en contexto, lo cual es más difícil de hacer con "Dos y uno": tendría que considerar "uno" sustantivo, y todavía no tendría sentido contextual.
No es un mnemotécnico, pero lo leo de la siguiente manera:
0es stdin.
1es stdout
2es stderr.
>es dentro.
<está fuera de.
&es el descriptor de archivo (en algunos shells).
2>&1
2 > & 1
stderr into file descriptor 1
redirect stderr into stdout
Podría cambiar si se ha metido con alguno de los descriptores de archivo antes de la redirección ...
2>somefile 1>&2
2 > somefile 1 > &2
stderr into somefile and stdout into file descriptor 2
redirect stderr into somefile and stdout into somefile.
Cuando escribe 2>&1, dice "el error estándar va a la salida estándar".
Analicemos eso.
Primero desea memorizar que el error estándar es 2y la salida estándar es 1.
Entonces tienes 2algo, algo 1.
"va a" está escrito >.
Entonces tienes 2>algo 1.
2>filenamesignifica enviar error estándar a filename. Pero no desea enviarlo a un archivo llamado 1. Quiere algo más: el número de un archivo que ya está abierto. Para eso es eso &.
Por lo tanto 2>&1.
También puedes pensar en ello como si estuvieras haciendo una tarea, donde el >es como un igual y el &es como un $, compara:
f=$1
2>&1
Para comprender una línea de comando con múltiples redirecciones, lo importante es saber que las redirecciones se realizan de izquierda a derecha. Consulte Orden de redireccionamientos para obtener más detalles al respecto.
Si comprende que FD2 es STDERR, puede pensar: "Ah, y capturar STDERR donde sea que envíe STDOUT (FD1)".
Mis compañeros de trabajo y yo solemos decir "dos es mayor que uno", porque la mayoría de nosotros no siempre recordamos que stderres un descriptor de archivo 2y stdoutes 1(especialmente aquellos nuevos en Unix / Linux), por lo que las otras mnemotecnias sobre la redirección stderrrealmente no funcionan . ¡El único problema es que aún debes recordar a dónde va el signo!