kubi
kubi

Reputation: 965

First character disappears when piping script with ffmpeg to bash

I often create bash scripts with bash and pipe the results to bash... When I do this:

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

I get

bash: line 2: cho: command not found

Where did the 'e' of 'echo' go? What does ffmpeg do there? Other commands work fine.

Note also:

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

Upvotes: 1

Views: 337

Answers (1)

chepner
chepner

Reputation: 531165

ffmpeg also reads from standard input, which it inherits from its parent process, which is the bash process reading your command line. This means ffmpeg is reading the e from echo following the new line.

One fix is to redirection standard input for ffmpeg:

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

However, I can't help but point out that there isn't really any reason to run a script like this. If you want it in a separate process, start a subshell:

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

Upvotes: 1

Related Questions