2017-10-03 5 views
0

Je crée souvent des scripts bash avec bash et envoyer les résultats à bash ... Quand je fais ceci:Le premier caractère disparaît quand le script de tuyauterie avec ffmpeg pour bash

echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null\necho foo"|bash 

Je reçois

bash: line 2: cho: command not found 

Où est passé le 'e' de 'echo'? Que fait ffmpeg là-bas? Les autres commandes fonctionnent bien.

A noter également:

echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null\necho foo" > /tmp/foo.sh 
bash /tmp/foo.sh #works 
bash < /tmp/foo.sh #doesn't 
+0

Afficher la sortie de 'echo $ BASH_VERSION'. – Cyrus

+0

@Cyrus 4.4.12 (1) -release – kubi

Répondre

1

ffmpeg lit également l'entrée standard, dont elle hérite de son processus parent, qui est le processus bash la lecture de votre ligne de commande. Cela signifie que ffmpeg lit le e de echo en suivant la nouvelle ligne.

Un correctif est à la redirection d'entrée standard pour ffmpeg:

echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null < /dev/null \necho foo"|bash 

Cependant, je ne peux pas me empêcher de souligner qu'il n'y a pas vraiment de raison d'exécuter un script comme celui-ci. Si vous le souhaitez dans un processus séparé, commencez un sous-shell:

(
    ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null 
    echo foo 
) 
+0

Je ne peux pas m'empêcher d'ajouter ... la raison jusqu'à présent était la commodité - cela m'aide à construire et déboguer rapidement des scripts à usage unique, jamais revus. Et cela a fonctionné des centaines de fois, jusqu'à maintenant;) – kubi