Tôi không có nhiều kinh nghiệm sử dụng tee, vì vậy tôi hy vọng điều này không cơ bản lắm.
Sau khi xem một trong những câu trả lời cho câu hỏi này, tôi đã bắt gặp một hành vi kỳ lạ với tee
.
Để tôi xuất dòng đầu tiên và dòng tìm thấy, tôi có thể sử dụng dòng này:
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
Tuy nhiên, lần đầu tiên tôi chạy cái này (tính bằng zsh), kết quả là không đúng thứ tự, các tiêu đề cột nằm dưới kết quả grep (tuy nhiên điều này đã không xảy ra lần nữa), vì vậy tôi đã cố gắng trao đổi các lệnh xung quanh:
ps aux | tee >(grep syslog) | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Chỉ có dòng đầu tiên được in, và không có gì khác! Tôi có thể sử dụng tee để chuyển hướng đến grep không, hoặc tôi đang làm điều này sai cách?
Khi tôi gõ câu hỏi này, lệnh thứ hai thực sự hoạt động một lần đối với tôi, tôi đã chạy lại năm lần và sau đó quay lại kết quả một dòng. Đây chỉ là hệ thống của tôi? (Tôi đang chạy zsh trong tmux).
Cuối cùng, tại sao với lệnh đầu tiên là "grep syslog" không được hiển thị dưới dạng kết quả (chỉ có một kết quả)?
Để kiểm soát ở đây là grep mà không có 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
Cập nhật: Có vẻ như phần đầu đang khiến toàn bộ lệnh bị cắt bớt (như được chỉ ra trong câu trả lời bên dưới), lệnh bên dưới hiện đang trả về như sau:
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'
.