我经常使用bash创建bash脚本并将结果传递给bash ...当我这样做时:
echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null\necho foo"|bash
我得到了
bash: line 2: cho: command not found
' e'回声'走? ffmpeg在那做什么?其他命令工作正常。
另请注意:
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 :(得分:1)
ffmpeg
也从标准输入读取,它继承自其父进程,即读取命令行的bash
进程。这意味着ffmpeg
正在新行后面的e
读取echo
。
一个解决方法是重定向ffmpeg
的标准输入:
echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null < /dev/null \necho foo"|bash
但是,我不禁要指出,没有任何理由可以运行这样的脚本。如果您想在单独的进程中使用它,请启动子shell:
(
ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null
echo foo
)