- # nope, new image. close the previous pipeline
- close_validation_app();
-
- my $validation_command = find_validation_command($header);
- print " using '$validation_command'.\n";
- $current_validation_pid = open($current_validation_pipeline, "|-", $validation_command);
-
- if (!$current_validation_pid) {
- print "Can't execute validation command: $!\n";
- undef $current_validation_pid;
- undef $current_validation_pipeline;
- return undef;
+ my @command = find_validation_command($header);
+
+ if ($#command == 0) {
+ $command[0]->{fd} = Symbol::gensym;
+ $command[0]->{pid} = open3($current_validation_pipeline, "/dev/null", $command[0]->{stderr}, $command[0]->{pgm});
+ } else {
+ my $nb = $#command;
+ $command[$nb]->{fd} = "VAL_GLOB_$nb";
+ $command[$nb]->{stderr} = Symbol::gensym;
+ $command[$nb]->{pid} = open3($command[$nb]->{fd}, "/dev/null", $command[$nb]->{stderr}, $command[$nb]->{pgm});
+ close($command[$nb]->{stderr});
+ while ($nb-- > 1) {
+ $command[$nb]->{fd} = "VAL_GLOB_$nb";
+ $command[$nb]->{stderr} = Symbol::gensym;
+ $command[$nb]->{pid} = open3($command[$nb]->{fd}, ">&". $command[$nb+1]->{fd}, $command[$nb]->{stderr}, $command[$nb]->{pgm});
+ close($command[$nb+1]->{fd});
+ }
+ $command[$nb]->{stderr} = Symbol::gensym;
+ $command[$nb]->{pid} = open3($current_validation_pipeline, ">&".$command[$nb+1]->{fd}, $command[$nb]->{stderr}, $command[$nb]->{pgm});
+ close($command[$nb+1]->{fd});