Tôi đang sử dụng ffmpeg để lấy thông tin meta của clip âm thanh. Nhưng tôi không thể grep nó.
$ 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
...
Tôi đã kiểm tra, đầu ra ffmpeg này được chuyển đến stderr.
$ ffmpeg -i 01-Daemon.mp3 2> /dev/null
Vì vậy, tôi nghĩ rằng grep không thể đọc luồng lỗi để bắt các dòng khớp. Làm thế nào chúng ta có thể kích hoạt grep để đọc luồng lỗi?
Sử dụng liên kết nixCraft , tôi đã chuyển hướng luồng lỗi tiêu chuẩn sang luồng đầu ra tiêu chuẩn, sau đó grep hoạt động.
$ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration
Duration: 01:15:12.33, start: 0.000000, bitrate: 64 kb/s
Nhưng nếu chúng ta không muốn chuyển hướng stderr sang thiết bị xuất chuẩn thì sao?
grep
chỉ có thể hoạt động trên stdin. Đó là đường ống được tạo bởi lớp vỏ kết nối stdin của grep với thiết bị xuất chuẩn của lệnh khác. Và shell chỉ có thể kết nối một thiết bị xuất chuẩn với một stdin.
grep
chỉ có thể hoạt động trên thiết bị xuất chuẩn (Mặc dù tôi không thể tìm thấy nguồn chính tắc để sao lưu), điều đó có nghĩa là bất kỳ luồng nào cũng cần được chuyển đổi thành thiết bị xuất chuẩn trước.