Nie mam dużego doświadczenia w używaniu tee, więc mam nadzieję, że nie jest to bardzo podstawowe.
Po obejrzeniu jednej z odpowiedzi na to pytanie natknąłem się na dziwne zachowanie tee
.
Aby wygenerować pierwszy wiersz i znaleziony wiersz, mogę użyć tego:
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
Jednak przy pierwszym uruchomieniu (w zsh) wynik był w niewłaściwej kolejności, nagłówki kolumn były poniżej wyników grep (jednak nie powtórzyło się to ponownie), więc próbowałem zamienić polecenia:
ps aux | tee >(grep syslog) | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Drukowana jest tylko pierwsza linia i nic więcej! Czy mogę użyć tee do przekierowania na grep, czy robię to w niewłaściwy sposób?
Kiedy pisałem to pytanie, drugie polecenie faktycznie zadziałało dla mnie raz, uruchomiłem je ponownie pięć razy, a następnie z powrotem do wyniku w jednej linii. Czy to tylko mój system? (Używam Zsh w tmux).
Wreszcie, dlaczego przy pierwszym poleceniu „grep syslog” nie jest wyświetlany jako wynik (jest tylko jeden wynik)?
Do kontroli tutaj jest grep bez 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
Aktualizacja: Wygląda na to, że głowa powoduje obcięcie całego polecenia (jak wskazano w odpowiedzi poniżej), poniższe polecenie zwraca teraz:
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'
.