O efeito do piping para tee
é que, seja qual for o seu primeiro comando, ele grava em sua saída padrão é gravado em um arquivo (cujo nome você passou como um argumento de linha de comando para tee
), bem como gravado na saída padrão do comando tee
. Se o pipeline não continuar e você não executar nenhum redirecionamento no comando tee
, a saída padrão do tee
será a do seu shell, geralmente seu terminal.
É por isso que executar who
e executar who | tee test
mostra o mesmo texto no seu terminal. A diferença com tee
você também escreve em um arquivo.
Se o pipeline continuar, como no caso de who | tee test | wc -l
, então qualquer saída padrão que tenha sido gravada no terminal será enviada para o próximo comando no pipeline. Este é o comando wc
e, ao contrário de tee
, wc
não copia sua entrada para saída padrão (ou em qualquer lugar). Em vez disso, mostra estatísticas. Com a opção -l
, mostra apenas as contagens de linhas, o que é tudo o que vê.
Portanto, o motivo pelo qual você vê apenas 2
de who | tee test | wc -l
é o mesmo que o motivo pelo qual você vê apenas 2
de who | wc -l
. O comando tee
grava a saída de who
em um arquivo, mas não faz com que ele seja impresso no terminal, a menos que sua saída padrão seja o terminal. Por padrão, geralmente é, mas não quando você canaliza para outro comando.
Se você viu um comando no lado esquerdo de um |
cuja saída é exibida no terminal, em vez de ser usado como entrada para o próximo comando no pipeline, provavelmente ele estava gravando para erro padrão em vez da saída padrão.