J'utilise ffmpeg pour obtenir les méta-informations d'un clip audio. Mais je suis incapable de le savoir.
$ 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
...
J'ai vérifié, cette sortie de ffmpeg est dirigée vers stderr.
$ ffmpeg -i 01-Daemon.mp3 2> /dev/null
Donc, je pense que grep est incapable de lire le flux d'erreur pour intercepter les lignes correspondantes. Comment pouvons-nous activer grep pour lire le flux d'erreur?
En utilisant le lien nixCraft , j'ai redirigé le flux d'erreur standard vers le flux de sortie standard, puis grep a fonctionné.
$ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration
Duration: 01:15:12.33, start: 0.000000, bitrate: 64 kb/s
Mais que se passe-t-il si nous ne voulons pas rediriger stderr vers stdout?
grep
ne peut fonctionner que sur stdin. C'est le canal créé par le shell qui relie stdin de grep à la sortie standard de l'autre commande. Et le shell ne peut connecter qu'un stdout à un stdin.
grep
cela ne peut fonctionner que sur stdout (bien que je ne puisse pas trouver la source canonique pour la sauvegarder), ce qui signifie que tout flux doit d'abord être converti en stdout.