У меня нет большого опыта использования тройника, поэтому я надеюсь, что это не очень просто.
После просмотра одного из ответов на этот вопрос я столкнулся со странным поведением 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
Печатается только первая строка, и больше ничего! Могу ли я использовать tee для перенаправления на grep, или я делаю это неправильно?
Когда я набирал этот вопрос, вторая команда фактически сработала один раз для меня, я запустил ее снова пять раз, а затем вернулся к результату в одну строку. Это только моя система? (Я запускаю Zsh в Tmux).
И наконец, почему с первой командой «grep syslog» не отображается как результат (результат только один)?
Для контроля здесь grep без 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
Обновление: кажется, что head заставляет целую команду обрезаться (как указано в ответе ниже), теперь приведенная ниже команда возвращает следующее:
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'
.