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.