ที่ไม่มีอะไรจะทำอย่างไรกับ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จากนั้นกรองจะซ่อนผล