¿Tienes un mnemónico o sistema? Esto me ha molestado durante años, siempre tengo que buscarlo
io-redirection
zzapper
fuente
fuente
"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.fuente
No es un mnemotécnico, pero lo leo de la siguiente manera:
0
es stdin.1
es stdout2
es stderr.>
es dentro.<
está fuera de.&
es el descriptor de archivo (en algunos shells).Podría cambiar si se ha metido con alguno de los descriptores de archivo antes de la redirección ...
fuente
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
2
y la salida estándar es1
.Entonces tienes
2
algo, algo1
."va a" está escrito
>
.Entonces tienes
2>
algo1
.2>filename
significa enviar error estándar afilename
. Pero no desea enviarlo a un archivo llamado1
. 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: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.
fuente
Recordé que siempre es 2 -> 1. Stderr a stdout.
La parte media siempre es la difícil y siempre la estropeé, hasta que recordé que primero viene el carácter agudo
>
, luego el personaje que no puedo escribir en la vida real&
.Entonces nunca
2&>1
, siempre2>&1
fuente
Si comprende que FD2 es STDERR, puede pensar: "Ah, y capturar STDERR donde sea que envíe STDOUT (FD1)".
fuente
Mis compañeros de trabajo y yo solemos decir "dos es mayor que uno", porque la mayoría de nosotros no siempre recordamos que
stderr
es un descriptor de archivo2
ystdout
es1
(especialmente aquellos nuevos en Unix / Linux), por lo que las otras mnemotecnias sobre la redirecciónstderr
realmente no funcionan . ¡El único problema es que aún debes recordar a dónde va el signo!fuente