在Perl中使用system()命令时,如何将STDERR重新定向到STDOUT?2>&;1解决方案不起作用
我正在从一个子程序调用系统函数。 代码如下所示:在Perl中使用system()命令时,如何将STDERR重新定向到STDOUT?2>&;1解决方案不起作用,perl,stdout,stderr,io-redirection,Perl,Stdout,Stderr,Io Redirection,我正在从一个子程序调用系统函数。 代码如下所示: sub execCmd; my @cmd_line; my $cmd_file_name; #pre-process argv to open a file to read the command. open(F,'<',"$cmd_file_name); my $temp=<F>; chomp($temp); @cmd_line=split(/ /, "$temp"); close F; execCmd(); sub ex
sub execCmd;
my @cmd_line;
my $cmd_file_name;
#pre-process argv to open a file to read the command.
open(F,'<',"$cmd_file_name);
my $temp=<F>;
chomp($temp);
@cmd_line=split(/ /, "$temp");
close F;
execCmd();
sub execCmd {
my $test_stat=system("@cmd_line cmd_args 2>&1");
if($test_stat){
print "TEST FAILED";
exit;
}
exit(0);
}
sub-execCmd;
我的@cmd_行;
我的$cmd_文件名;
#预处理argv以打开文件以读取命令。
open(F),您的子例程永远不会被调用,因为它隐藏了现有的Perl函数exec
。相反,当您调用exec()
时,它正在运行真正的exec
,因为您没有向它传递任何参数,所以它什么也不做
由于您的sub正在调用exit(0)
,因此您最好放弃您的子例程,像这样调用realexec
,这将做同样的事情
exec("cmd cmd_args 2>&1");
您弄错了。system
在提供单个标量时,希望它是sh
命令,而您提供的sh
命令会按照您的要求执行。此外,请不要使用与Perl运算符相同的名称调用SUB(例如exec
)。您建议什么修复方法?您希望发生什么?目前,我无法在STDOUT上看到错误消息。但是当我从shell脚本运行相同的命令时,我可以在STDOUT上看到错误。需要使此perl脚本也这样做。我不想发布子例程的确切名称,因此名称“exec”没有意识到我使用与Perl运算符相同的名称。无法使用exec,因为我需要正在执行的命令的退出代码。但是,您的代码没有显示您正在使用命令的退出代码,因此,如果您没有提供所有信息,您如何期望得到正确的答案?您好,我编辑了代码,这正是我正在做的。可以吗请过目。提前谢谢!