ที่ไม่มีอะไรจะทำอย่างไรกับgrep
- มันเป็นเพราะท่อ|
เปลี่ยนเส้นทางกระแสออกมาตรฐานstdout
ในขณะที่ข้อความที่อยู่ในกระแสข้อผิดพลาดมาตรฐานPermission denied
stderr
คุณสามารถบรรลุผลที่คุณต้องการโดยการรวมลำธารใช้2>&1
(เปลี่ยนเส้นทางกระแสที่มีคำอธิบายถึงไฟล์2
ไปยังสตรีมที่มีคำอธิบายถึงไฟล์1
) เพื่อให้stderr
เช่นเดียวกับstdout
ที่ได้รับการประปาเพื่อป้อนคำสั่ง grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
แต่มันจะเป็นเรื่องปกติที่จะทิ้งstderr
มันไปพร้อม ๆ/dev/null
find / -name libGL.so.1 2>/dev/null
ใช้ | & แทน 2> & 1 |
หากคุณดูที่หน้า Bash man คุณอาจสังเกตเห็นการแจ้งเตือนนี้:
หาก|&
ใช้ข้อผิดพลาดมาตรฐานของคำสั่งจะเชื่อมต่อกับอินพุตมาตรฐานของ command2 ผ่านไพพ์ 2>&1 |
มันเป็นชวเลข
ดังนั้นคุณสามารถใช้โครงสร้างนี้เช่นกันหากคุณต้องการเข้าร่วม STDERR และ STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
/foo/bar/denied/libGL.so.1
การรวมstdout
และstderr
จากนั้นกรองจะซ่อนผล