¿Qué sucede debajo de la redirección de errores?

¿Qué sucede debajo de la redirección de errores?

Mientras leía sobre Linux obtuve lo siguiente:

Debido a que stderr no es lo mismo que stdout, en el ejemplo anterior se seguirán viendo mensajes de error en las ventanas del terminal.

Si desea redirigir stderr a un archivo separado, use el número de descriptor de archivo de stderr (2), el signo mayor que (>), seguido del nombre del archivo que desea que contenga todo lo que el comando en ejecución escribe en stderr:

$ do_something 2> error-file

Se puede utilizar una notación abreviada especial para colocar cualquier cosa escrita en el descriptor de archivo 2 (stderr) en el mismo lugar que el descriptor de archivo 1 (stdout): 2>&1

$ do_something > all-output-file 2>&1

bash permite una sintaxis más sencilla para lo anterior:

$ do_something >& all-output-file

Aquí do_somethinghay un comando. Realmente no entiendo lo que sucede debajo en los 3 comandos mencionados anteriormente. Sé que &se utiliza para convertir un proceso en un proceso en segundo plano, pero no entiendo la lógica. Soy nuevo en este sabor, por favor ¿Alguien puede explicar esto?

Respuesta1

Tu confusión puede deberse a que >&es algo totalmente diferente a &.

>&o <&se utilizan en la redirección para apuntar a un descriptor de archivo (fd). Los casos anteriores redirigen a 1 y 2, que son stdout y stderr respectivamente.

>significa "redirigir salida estándar"

2>significa "redireccionar fd 2 (stderr)"

>&2significa "redirigir stdout a fd 2 (stderr)". Tenga en cuenta en qué se diferencia esto de >2lo que significaría "redirigir la salida estándar a un archivo llamado 2"; por eso es &importante. Indica que lo siguiente será un fd, no un nombre de archivo.

Ahora, por supuesto, como notó, si a &está solo sin un símbolo de redirección, entonces significa algo completamente diferente: "regrese inmediatamente, ejecute el comando anterior en segundo plano".

información relacionada