entender una secuencia de redireccionamientos

8

Si se usan varias redirecciones juntas, ¿cambiar el orden hace alguna diferencia?

¿Cómo se entenderá el significado de su orden? ¿El canal encadenado de redirecciones se construye como lectura de las redirecciones de izquierda a derecha o de derecha a izquierda?

Por ejemplo

command 2>&1 > somefile

command > somefile 2>&1

¡Gracias y saludos!

Tim
fuente

Respuestas:

7

Sí, el orden marca la diferencia y deben leerse de izquierda a derecha.

command 2>&1 >somefilesignifica redirigir stderr (2) al destino actual de stdout (el terminal). Luego cambie stdout para ir a somefile. Entonces stderr va a la terminal, y stdout va a un archivo.

command >somefile 2>&1significa redirigir stdout a somefile, y luego redirigir stderr al mismo destino que stdout (el archivo). Entonces, tanto stderr como stdout van a somefile.

Esto se explica en la sección 3.6 del manual Bash: redirecciones .

cjm
fuente
1
man bash 

dice:

REDIRECCIÓN Antes de ejecutar un comando, su entrada y salida pueden redirigirse utilizando una notación especial interpretada por el shell. La redirección también se puede usar para abrir y cerrar archivos para el entorno de ejecución de shell actual. Los siguientes operadores de redireccionamiento pueden preceder o aparecer en cualquier lugar dentro de un comando simple o pueden seguir un comando. Las redirecciones se procesan en el orden en que aparecen, de izquierda a derecha.

y

Tenga en cuenta que el orden de las redirecciones es significativo. Por ejemplo, el comando

ls > dirlist 2>&1

dirige tanto la salida estándar como el error estándar a la lista de archivos, mientras que el comando

ls 2>&1 > dirlist

dirige solo la salida estándar a dirlist de archivo, porque el error estándar se duplicó de la salida estándar antes de que la salida estándar se redirigiera a dirlist.

usuario desconocido
fuente