ฉันไม่ค่อยมีประสบการณ์ในการใช้เสื้อยืดดังนั้นฉันหวังว่านี่จะไม่ธรรมดา
หลังจากที่ได้ดูหนึ่งในคำตอบที่จะคำถามนี้ฉันมาข้าม beheviour 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
อัปเดต: ดูเหมือนว่าส่วนหัวทำให้คำสั่งทั้งหมดถูกตัดทอน (ดังที่ระบุไว้ในคำตอบด้านล่าง) คำสั่งด้านล่างจะคืนค่าดังต่อไปนี้:
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'
แต่มันจะทำความสะอาดมากเพียงแค่ทำสิ่งที่ชอบ