Sto usando ffmpeg per ottenere le meta informazioni di una clip audio. Ma non sono in grado di farlo.
$ 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
...
Ho controllato, questo output di ffmpeg è diretto a stderr.
$ ffmpeg -i 01-Daemon.mp3 2> /dev/null
Quindi penso che grep non sia in grado di leggere il flusso di errori per rilevare le linee corrispondenti. Come possiamo consentire a grep di leggere il flusso di errori?
Usando il collegamento nixCraft , ho reindirizzato il flusso di errori standard al flusso di output standard, quindi grep ha funzionato.
$ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration
Duration: 01:15:12.33, start: 0.000000, bitrate: 64 kb/s
E se non volessimo reindirizzare stderr a stdout?
grep
può funzionare solo su stdin. È la pipe creata dalla shell che collega lo stdin di grep allo stdout dell'altro comando. E la shell può collegare solo uno stdout a uno stdin.
grep
possa funzionare solo su stdout (anche se non riesco a trovare la fonte canonica per eseguirne il backup), il che significa che qualsiasi stream deve prima essere convertito in stdout.