Não tenho muita experiência em usar tee, então espero que isso não seja muito básico.
Depois de ver uma das respostas a essa pergunta, me deparei com um estranho comportamento tee
.
Para que eu produza a primeira linha e uma linha encontrada, eu posso usar isso:
ps aux | tee >(head -n1) | grep syslog
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
syslog 806 0.0 0.0 34600 824 ? Sl Sep07 0:00 rsyslogd -c4
No entanto, na primeira vez em que executei isso (em zsh), o resultado estava na ordem errada, os cabeçalhos das colunas estavam abaixo dos resultados do grep (no entanto, isso não aconteceu novamente), então tentei trocar os comandos:
ps aux | tee >(grep syslog) | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Somente a primeira linha é impressa e nada mais! Posso usar tee para redirecionar para grep, ou estou fazendo isso da maneira errada?
Enquanto escrevia essa pergunta, o segundo comando realmente funcionou uma vez para mim, executei-o novamente cinco vezes e depois voltei ao resultado de uma linha. Este é apenas o meu sistema? (Estou executando o zsh no tmux).
Finalmente, por que com o primeiro comando "grep syslog" não é mostrado como resultado (existe apenas um resultado)?
Para controle aqui está o grep sem o tee
ps aux | grep syslog
syslog 806 0.0 0.0 34600 824 ? Sl Sep07 0:00 rsyslogd -c4
henry 2290 0.0 0.1 95220 3092 ? Ssl Sep07 3:12 /usr/bin/pulseaudio --start --log-target=syslog
henry 15924 0.0 0.0 3128 824 pts/4 S+ 13:44 0:00 grep syslog
Atualização: parece que o cabeçote está causando o comando inteiro truncar (conforme indicado na resposta abaixo); o comando abaixo agora está retornando o seguinte:
ps aux | tee >(grep syslog) | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
syslog 806
ps aux | sed -n -e '1p' -e '/syslog/p'
.