force exit on interrupt signal
authorMischa POSLAWSKY <perl@shiar.org>
Thu, 12 Sep 2019 20:58:31 +0000 (22:58 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Thu, 19 Sep 2019 12:42:31 +0000 (14:42 +0200)
Display everything even if pipe does not abort.

barcat

diff --git a/barcat b/barcat
index d7361a11f9655ab589bbd659bf1c1d72a7c42c0f..9e4d0ae0feaf3de2ba64284b3f014f108b38a35b 100755 (executable)
--- a/barcat
+++ b/barcat
@@ -94,6 +94,7 @@ $SIG{ALRM} = sub {
        show_lines();
        alarm $opt{interval} if defined $opt{interval} and $opt{interval} > 0;
 };
+$SIG{INT} = \&show_exit;
 
 if (defined $opt{interval}) {
        $opt{interval} ||= 1;
@@ -105,12 +106,6 @@ if (defined $opt{interval}) {
        } or warn $@, "Expect slowdown with large datasets!\n";
 }
 
-$SIG{INT} = sub {
-       $SIG{INT} = 'DEFAULT';  # reset for subsequent attempts
-       exit if !$.;
-       'IGNORE' # continue after assumed eof
-};
-
 my $valmatch = qr/$opt{anchor} ( \h* -? [0-9]* \.? [0-9]+ (?: e[+-]?[0-9]+ )? |)/x;
 while (readline) {
        s/\r?\n\z//;
@@ -221,7 +216,6 @@ continue {
 say '' if $opt{spark};
 
 }
-show_lines();
 
 sub show_stat {
        if ($opt{hidemin} or $opt{hidemax}) {
@@ -241,7 +235,15 @@ sub show_stat {
        }
        say '';
 }
-show_stat() if $opt{stat};
+
+sub show_exit {
+       show_lines();
+       show_stat() if $opt{stat};
+       exit 130 if @_;  # 0x80+signo
+       exit;
+}
+
+show_exit();
 
 __END__
 =encoding utf8