ฉันใช้ ffmpeg เพื่อรับข้อมูลเมตาของคลิปเสียง แต่ฉันไม่สามารถ grep มัน
$ ffmpeg -i 01-Daemon.mp3 |grep -i Duration
FFmpeg version SVN-r15261, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --prefix=/usr --bindir=/usr/bin
--datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib
--mandir=/usr/share/man --arch=i386 --extra-cflags=-O2
...
ฉันตรวจสอบเอาต์พุต ffmpeg นี้โดยตรงไปที่ stderr
$ ffmpeg -i 01-Daemon.mp3 2> /dev/null
ดังนั้นฉันคิดว่า grep ไม่สามารถอ่านสตรีมข้อผิดพลาดเพื่อตรวจจับเส้นที่ตรงกันได้ เราจะเปิดใช้งาน grep เพื่ออ่านสตรีมข้อผิดพลาดได้อย่างไร?
การใช้ลิงก์nixCraftฉันเปลี่ยนเส้นทางสตรีมข้อผิดพลาดมาตรฐานไปยังสตรีมเอาต์พุตมาตรฐานจากนั้น grep ทำงาน
$ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration
Duration: 01:15:12.33, start: 0.000000, bitrate: 64 kb/s
แต่ถ้าเราไม่ต้องการเปลี่ยนเส้นทาง stderr ไปเป็น stdout ล่ะ?
grep
สามารถทำงานได้บน stdin เท่านั้น เป็นไพพ์ที่สร้างขึ้นโดยเชลล์ที่เชื่อมต่อ stdin ของ grep กับ stdout ของคำสั่งอื่น และเชลล์สามารถเชื่อมต่อ stdout กับ stdin เท่านั้น
grep
สามารถใช้งานได้บน stdout เท่านั้น (แม้ว่าฉันจะไม่สามารถหาแหล่งที่มาแบบบัญญัติเพื่อสำรองข้อมูลได้) ซึ่งหมายความว่าสตรีมใด ๆ จำเป็นต้องแปลงเป็น stdout ก่อน