Lógica interna de redirecciones encadenadas

Lógica interna de redirecciones encadenadas

cuando escribo

cat some_file > new_file1 > new_file2

Obtuve salida desde some_fileadentro new_file2y vacía new_file1.

¿Cuál es la lógica interna en esto? Más específicamente, ¿qué es el stdoutarchivo?

Nota: En Windows se omite el archivo del medio.

Respuesta1

Depende del caparazón.

En bash, echo derp >file1 >file2primero abre file1, lo trunca y luego organiza que se stdoutescriba echo derpen file1. Luego bash hace lo mismo para file2: lo abre file2, lo trunca y organiza que stdoutse echo derpescriba en su lugar file2.

El efecto neto es que file1se trunca (es decir, se elimina el contenido) y stdoutsolo entra en file2. No se produce ningún encadenamiento. Bash sólo es capaz de redirigir la salida estándar a un lugar a la vez. Esto también se aplica a las tuberías: echo derp > file | catlos resultados hacen que "derp" se escriba en el archivo, no en la tubería.

En zsh, sin embargo, echo derp >file1 >file2escribe tanto en file1como en file2, como es de esperar intuitivamente. Consulte MULTIOS man zshmiscpara obtener más detalles si usa zsh.

Para lograr esto fuera de zsh, simplemente puede usar tee: echo derp | tee file1 file2 > /dev/nulles equivalente a zsh echo derp >file1 >file2.

información relacionada