Как перенаправить STDERR в STDOUT при использовании команды system () в Perl?Решение 2> & 1 не работает - PullRequest
0 голосов
/ 05 июня 2018

Я вызываю системную функцию из подпрограммы.код выглядит примерно так:

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);
}

1 Ответ

0 голосов
/ 05 июня 2018

Ваша подпрограмма никогда не вызывается, потому что она скрывает существующую функцию Perl exec.Вместо этого, когда вы вызываете exec(), он работает с реальным exec, и, поскольку вы не передали ему никаких параметров, он ничего не делает.

Поскольку ваша сабвуфер вызывает exit(0), вы также можете отказаться от своегоподпрограмму и назовите реальный exec как этот, который будет делать то же самое

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