Eu acho que há uma diferença entre como você acha que o redirecionamento de shell funciona e como ele realmente funciona.
Você não pode redirecionar a saída do shell várias vezes e esperar que ele seja redirecionado para todos os locais que você especificou. Em vez disso, ele será redirecionado apenas para o último local, que no seu caso é file2
. A resposta do Chaos fornece uma explicação decente sobre como esse redirecionamento de E / S funciona.
O que você realmente quer fazer é:
$ cat example.txt | tee file1 > file2
tee
é um programa que lê a entrada padrão e grava em vários descritores de arquivo. Um deles é sempre a saída padrão. Portanto, usamos tee
para gravar a saída em file1
e, em seguida, redirecionar seu stdout para file2
.
Além disso, com base nas sugestões nos comentários, essa é uma maneira melhor de fazer o que você está procurando:
$ tee file1 > file2 < example.txt
Essa abordagem tem a vantagem de redirecionar o stdin
em vez de tentar ler sobre um pipe. Isso significa que o shell agora precisa gerar um processo a menos. Também elimina o que é conhecido como "Uso inútil de gato".