Я не маю великого досвіду використання трійника, тому сподіваюся, що це не дуже просто.
Переглянувши одну з відповідей на це питання, я зіткнувся з дивним поведінкою tee
.
Для того, щоб я вивів перший рядок і знайдений рядок, я можу використовувати це:
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
Однак, коли я вперше запустив це (в zsh), результат був у неправильному порядку, заголовки стовпців були нижче результатів grep (однак це не повторилося), тому я спробував поміняти команди навколо:
ps aux | tee >(grep syslog) | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Друкується лише перший рядок, і більше нічого! Чи можу я використовувати трійник для переадресації на grep, чи роблю це неправильно?
Коли я набирав це питання, друга команда насправді працювала один раз для мене, я запускав її ще п'ять разів, а потім повертався до результату в один рядок. Це лише моя система? (Я запускаю zsh в межах tmux).
Нарешті, чому з першою командою "grep syslog" не відображається як результат (є лише один результат)?
Для контролю тут використовується греп без 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
Оновлення: Здається, що головна команда змушує усієї команди скорочувати (як зазначено у відповіді нижче) команда нижче повертає наступне:
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'
.