Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中使用system()命令时,如何将STDERR重新定向到STDOUT?2>&;1解决方案不起作用_Perl_Stdout_Stderr_Io Redirection - Fatal编程技术网

在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)
,因此您最好放弃您的子例程,像这样调用real
exec
,这将做同样的事情

exec("cmd cmd_args 2>&1");

您弄错了。
system
在提供单个标量时,希望它是
sh
命令,而您提供的
sh
命令会按照您的要求执行。此外,请不要使用与Perl运算符相同的名称调用SUB(例如
exec
)。您建议什么修复方法?您希望发生什么?目前,我无法在STDOUT上看到错误消息。但是当我从shell脚本运行相同的命令时,我可以在STDOUT上看到错误。需要使此perl脚本也这样做。我不想发布子例程的确切名称,因此名称“exec”没有意识到我使用与Perl运算符相同的名称。无法使用exec,因为我需要正在执行的命令的退出代码。但是,您的代码没有显示您正在使用命令的退出代码,因此,如果您没有提供所有信息,您如何期望得到正确的答案?您好,我编辑了代码,这正是我正在做的。可以吗请过目。提前谢谢!