Perl 脚本中有太多引号。咬牙切齿,我想你可以这样做:
#!/usr/bin/perl
`/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov`;
哦哦;你在那里有一个bash 进程重定向。这使事情复杂化了;您不能像这样简单地拆分命令:
#!/usr/bin/perl
my $x264 = "/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log";
exec "/usr/bin/mplayer", "-nosound", "-benchmark", "-vo",
"yuv4mpeg:file=>($x264)",
"input.mov";
这通常是最好的方法;它不适合你。
你最好还是使用:
#!/usr/bin/perl
system "/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov";
因为你真的对命令的输出不感兴趣。 OTOH,真的没有理由像这样使用 Perl。最好写:
#!/usr/bin/bash
/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov
在命令前可选exec:
#!/usr/bin/bash
exec /usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov
随着有关请求的原因和原因的信息逐渐流出,我们观察到:
sh: 1: command : not found error output in perl script
提到sh 表示部分问题。当bash 作为sh 运行时,它不支持进程替换。鉴于这是更大 Perl 脚本的一个片段,我们将继续努力从 Perl 运行命令。
#!/usr/bin/perl
use strict;
use warnings;
my $x264 = "/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log";
system "bash", "-c",
"/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>($x264) input.mov";