Я використовую ffmpeg, щоб отримати мета-інформацію аудіокліпу. Але я не в змозі зіткнутися з цим.
$ 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 , я перенаправляв стандартний потік помилок на стандартний вихідний потік, після чого працював греп .
$ 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 до stdin.
grep
може працювати лише на stdout (Хоча я не можу знайти канонічне джерело, яке б створити резервну копію), це означає, що будь-який потік потрібно перетворити спочатку на stdout.