Для ребенка выполните
open STDOUT, "|-", "tee", $output
or die "$0: failed to start tee: $!";
Если вы по какой-то причине не хотите использовать tee
, вы можете использовать версию для бедного человека, разветвив другого ребенка черезopen STDOUT, "|-"
и выполнение дублирования у внука:
#! /usr/bin/perl
use warnings;
use strict;
my $pid = fork;
die "$0: fork: $!" unless defined $pid;
if ($pid) {
waitpid $pid, 0;
}
else {
my $pid = open STDOUT, "|-";
die "$0: fork: $!" unless defined $pid;
select STDOUT; $| = 1; # disable STDOUT buffering
if ($pid) {
print "Hiya!\n";
system "echo Howdy";
close STDOUT or warn "$0: close: $!";
exit 0;
}
else {
open my $fh, ">", "/tmp/other-output" or die "$0: open: $!";
my $status;
while ($status = sysread STDIN, my $data, 8192) {
syswrite $fh, $data and print $data or die "$0: output failed: $!";
}
die "$0: sysread: $!" unless defined $status;
close $fh or warn "$0: close: $!";
exit 0;
}
}
Пример запуска:
$ ./owntee
Hiya!
Howdy
$ cat other-output
Hiya!
Howdy