Em qualquer shell que seja compatível com Bourne ou POSIX, os redirecionamentos são processados da esquerda para a direita e o pipe é o primeiro. Assim, seu comando é executado dessa maneira (omito o que acontece no subprocesso 2):
- Crie um canal.
- Bifurque dois subprocessos, 1 e 2.
- Redireciona a saída padrão de 1 para o pipe.
- Redirecione a saída padrão de 1 para
file
.
- Em 1, execute
rpm -qa
.
Se você quiser que a saída do subprocesso 1 seja replicada em dois canais (o arquivo e o canal), alguém terá que fazer o trabalho de fazer duas cópias dos dados. Isso é exatamente o que tee
é para.
rpm -qa | tee file | wc -l
O Zsh tem um recurso interno para replicação de saída, chamado multios . Em zsh (e somente em zsh com a opção multios
deixada, não em shells compatíveis com POSIX nem em shells pré-POSIX Bourne, nem em (t) csh quanto a isso), um comando como o que você escreveu é replicado os dados nos dois redirecionamentos de saída.
# in zsh
rpm -qa >file | wc -l