Das Problem scheint Deine Pipe nach tee zu sein; ersetze ich diese durch eine Umleitung in eine Datei, steht da auch nachher das Erwartete drin (gut, dafür erscheint nichts mehr auf der Konsole; aber es geht ums Prinzip, wo die Ausgaben bleiben).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use strict;
use warnings;
$SIG{INT} = \&interrupt;
open LOGFILE, ">", "/tmp/log.txt";
LOGFILE->autoflush(1);
select LOGFILE;
print "fileconsole!\n";
print "pause\n";
my $in = <STDIN>;
select STDOUT;
print "console1\n";
die;
sub interrupt {
print "Caught a control c!\n";
die;
}
END {
if(fileno(LOGFILE)){
print "close logfile\n";
close(LOGFILE) or warn;
}
}
Test & Ergebnis:
### ORIGINAL
$ perl /tmp/t3.pl
fileconsole!
pause
^CDied at /tmp/t3.pl line 20.
141 $
### ERSETZUNG DURCH EINE LOGDATEI (siehe Code oben)
$ perl /tmp/t3.pl ; cat /tmp/log.txt
^CDied at /tmp/t3.pl line 21.
fileconsole!
pause
Caught a control c!
close logfile
0 $
Beachte auch die unterschiedlichen Exit-codes (mit Pipe 141, mit Ausgabeumleitung in Datei 0).
Den genauen Grund kann ich derzeit nicht benennen.
EDIT: Möglicherweise findet sich etwas in
http://perldoc.perl.org/perlipc.html
EDIT2: Nach Hinweisen aus dem großen Datenorakel (das mit den 2 G's und O's) deutet der Exitcode 141 auf das Signal SIGPIPE hin. Du solltest also in dieser Richtung forschen.
Last edited: 2014-08-04 22:20:50 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!