Depende do shell.
No bash, echo derp >file1 >file2
primeiro abre file1
, trunca e organiza para que stdout
de echo derp
seja gravado em file1
. Em seguida, o bash faz o mesmo para file2
: abre file2
, trunca e organiza para que stdout
de echo derp
seja escrito em file2
.
O efeito líquido é que file1
é truncado (ou seja, o conteúdo é excluído) e stdout
entra apenas em file2
. Não há encadeamento acontecendo. O Bash só é capaz de redirecionar o stdout para um lugar por vez. Isso vale também para pipes: echo derp > file | cat
resulta em "derp" escrito no arquivo, não no pipe.
No zsh, no entanto, echo derp >file1 >file2
grava em file1
e file2
, como você pode esperar intuitivamente. Veja MULTIOS em man zshmisc
para detalhes se você usar zsh.
Para conseguir isso fora de zsh
, você pode simplesmente usar tee
: echo derp | tee file1 file2 > /dev/null
é equivalente a echo derp >file1 >file2
de zsh.