C
conrado.blasco
I'm trying to write an interactive script that gets commands from
STDIN, prints the results to STDOUT, *and* tees the results to a log
file.
My problem is that when I add the teeing line to the program (see
below), the script doesn't print anything to STDOUT anymore (not even
the prompt). When I comment out that line, everything works fine
(except that I don't get the log file).
(Well, it actually still prints something, but only when the session is
over.)
It seems to me that I'm missing something very obvious, but I can't
figure out... Any help appreciated.
Relevant excerpt below:
#!/usr/bin/env perl
use warnings; # Needed since '-w' won't work on the shebang line
use strict;
use File::Basename;
my $my_name = fileparse($0);
# STDOUT prints on the screen as well as on to log file
open (STDOUT, "| tee ./" . $my_name . ".log")
or die "Teeing error: $!\n";
my $prompt = "$my_name > ";
# Main loop, read and parse standard input
print $prompt;
while (<STDIN>) {
parse_cmdline($_);
print $prompt;
}
STDIN, prints the results to STDOUT, *and* tees the results to a log
file.
My problem is that when I add the teeing line to the program (see
below), the script doesn't print anything to STDOUT anymore (not even
the prompt). When I comment out that line, everything works fine
(except that I don't get the log file).
(Well, it actually still prints something, but only when the session is
over.)
It seems to me that I'm missing something very obvious, but I can't
figure out... Any help appreciated.
Relevant excerpt below:
#!/usr/bin/env perl
use warnings; # Needed since '-w' won't work on the shebang line
use strict;
use File::Basename;
my $my_name = fileparse($0);
# STDOUT prints on the screen as well as on to log file
open (STDOUT, "| tee ./" . $my_name . ".log")
or die "Teeing error: $!\n";
my $prompt = "$my_name > ";
# Main loop, read and parse standard input
print $prompt;
while (<STDIN>) {
parse_cmdline($_);
print $prompt;
}