
cuando escribo
cat some_file > new_file1 > new_file2
Obtuve salida desde some_file
adentro new_file2
y vacía new_file1
.
¿Cuál es la lógica interna en esto? Más específicamente, ¿qué es el stdout
archivo?
Nota: En Windows se omite el archivo del medio.
Respuesta1
Depende del caparazón.
En bash, echo derp >file1 >file2
primero abre file1
, lo trunca y luego organiza que se stdout
escriba echo derp
en file1
. Luego bash hace lo mismo para file2
: lo abre file2
, lo trunca y organiza que stdout
se echo derp
escriba en su lugar file2
.
El efecto neto es que file1
se trunca (es decir, se elimina el contenido) y stdout
solo 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 | cat
los resultados hacen que "derp" se escriba en el archivo, no en la tubería.
En zsh, sin embargo, echo derp >file1 >file2
escribe tanto en file1
como en file2
, como es de esperar intuitivamente. Consulte MULTIOS man zshmisc
para obtener más detalles si usa zsh.
Para lograr esto fuera de zsh
, simplemente puede usar tee
: echo derp | tee file1 file2 > /dev/null
es equivalente a zsh echo derp >file1 >file2
.