Je n'ai pas beaucoup d'expérience dans l'utilisation du tee, donc j'espère que ce n'est pas très basique.
Après avoir consulté l'une des réponses à cette question, je suis tombé sur un comportement étrange tee
.
Pour que je puisse sortir la première ligne et une ligne trouvée, je peux utiliser ceci:
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
Cependant, la première fois que j'ai exécuté ceci (en zsh), le résultat était dans le mauvais ordre, les en-têtes de colonne étaient en dessous des résultats grep (cela ne s'est toutefois pas reproduit), j'ai donc essayé de permuter les commandes:
ps aux | tee >(grep syslog) | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Seule la première ligne est imprimée, et rien d'autre! Puis-je utiliser tee pour rediriger vers grep, ou est-ce que je fais cela de manière incorrecte?
Comme je tapais cette question, la deuxième commande a réellement fonctionné une fois pour moi, je l'ai exécutée à nouveau cinq fois, puis de nouveau au résultat d'une ligne. Est-ce juste mon système? (J'utilise zsh dans tmux).
Enfin, pourquoi avec la première commande "grep syslog" n'est-il pas affiché comme résultat (il n'y a qu'un seul résultat)?
Pour le contrôle, voici le grep sans le 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
Mise à jour: Il semble que head provoque la troncature de toute la commande (comme indiqué dans la réponse ci-dessous), la commande ci-dessous renvoie maintenant ce qui suit:
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'
.