我经常用bash创建bash脚本,然后将结果吹进bash ...当我这样做时:
echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/nullnecho foo"|bash
我得到
bash: line 2: cho: command not found
" echo"的" e"去了哪里?FFMPEG在那里做什么?其他命令正常工作。
还要注意:
echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/nullnecho foo" > /tmp/foo.sh
bash /tmp/foo.sh #works
bash < /tmp/foo.sh #doesn't
ffmpeg
也从标准输入中读取,它是从其父进程继承的,即 bash
进程读取命令行。这意味着ffmpeg
是在新行之后从echo
读取e
。
一个修复程序是为ffmpeg
的重定向标准输入:
echo -e "ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null < /dev/null necho foo"|bash
但是,我不禁指出,实际上没有任何理由运行这样的脚本。如果您在单独的过程中需要它,请启动一个子壳:
(
ffmpeg -loglevel quiet -f lavfi -i nullsrc -t 1 -f null /dev/null
echo foo
)