¿Cómo recuerdas la sintaxis para la redirección 2> & 1 [cerrado]

12

¿Tienes un mnemónico o sistema? Esto me ha molestado durante años, siempre tengo que buscarlo

zzapper
fuente

Respuestas:

19

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".

lgeorget
fuente
No sé si ayuda ... La mnemotecnia es algo muy personal.
lgeorget
+12 Esa también es una descripción correcta de lo que está sucediendo.
Stéphane Chazelas
1
Me pregunto si fue así como se pensó ("la dirección de 1") cuando se inventó. Como algunas personas contribuyeron en gran medida tanto al lenguaje C como a UNIX cuando se inventaron, es posible
lgeorget
1
Podría comenzar a usar este en su lugar;)
goldilocks
3

"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.

encerrada dorada
fuente
2
No entiendo
Matt
2

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. 
Mate
fuente
2

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.

Mikel
fuente
0

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

polimero
fuente
0

Si comprende que FD2 es STDERR, puede pensar: "Ah, y capturar STDERR donde sea que envíe STDOUT (FD1)".

JRFerguson
fuente
0

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!

Salmo de ogro33
fuente