From d2e866720c6653cbbcc9ddbf079fcf4d9b4f7247 Mon Sep 17 00:00:00 2001 From: Peter Kleiweg Date: Thu, 26 Mar 2026 18:03:36 +0100 Subject: [PATCH] handle SIGPIPE --- .gitignore | 1 + Makefile | 4 ++++ cmd/flush/flush.go | 26 ++++++++++++++++++++++++++ namen.sh | 9 +++++++-- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 cmd/flush/flush.go diff --git a/.gitignore b/.gitignore index c16d56b..6754d6c 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ Tzum/xml2txt VRT/metadata VRT/vrt bin/ISOWeek +bin/flush bin/score bin/top20 bin/week2files diff --git a/Makefile b/Makefile index 92a64b8..8745534 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,7 @@ all: make -C Tzum make -C VRT make bin/ISOWeek + make bin/flush make bin/score make bin/top20 make bin/week2files @@ -18,6 +19,9 @@ all: bin/ISOWeek: cmd/ISOWeek/*.go go build -o $@ $^ +bin/flush: cmd/flush/*.go + go build -o $@ $^ + bin/score: cmd/score/*.go go build -o $@ $^ diff --git a/cmd/flush/flush.go b/cmd/flush/flush.go new file mode 100644 index 0000000..4fbd27f --- /dev/null +++ b/cmd/flush/flush.go @@ -0,0 +1,26 @@ +package main + +import ( + "bufio" + "os" + "os/signal" + "syscall" +) + +func main() { + doOUt := true + chSignal := make(chan os.Signal, 1) + signal.Notify(chSignal, syscall.SIGPIPE) + scanner := bufio.NewScanner(os.Stdin) + for scanner.Scan() { + line := scanner.Text() + select { + case <-chSignal: + doOUt = false + default: + } + if doOUt { + os.Stdout.WriteString(line + "\n") + } + } +} diff --git a/namen.sh b/namen.sh index 0e06682..fbb94ea 100755 --- a/namen.sh +++ b/namen.sh @@ -1,5 +1,7 @@ #!/bin/bash +PATH=/net/corpora/nlnieuws/bin:$PATH + PROGNAME=$0 usage() { echo " @@ -120,10 +122,13 @@ case $XN in ;; esac +HEAD='' TAIL='' if [ $LIMIT -gt 0 ] then - TAIL=" | head -n $LIMIT" + HEAD=" | flush | head -n $LIMIT" +else + TAIL=" | flush" fi if [ $USEPAGER = 1 ] then @@ -140,7 +145,7 @@ fi search () { # $'\t' in bash is een tab - CMD="alto $@ '$EXPR' '$TEMPLATE' | $SORT | uniq -c | sed -e 's/\([0-9]\) */\1\t/' | sort -f -k 2 2> /dev/null | sort -n -r -k 1,1 -s 2> /dev/null | column -t -s '"$'\t'"' -c 0 2> /dev/null$TAIL" + CMD="alto $@ '$EXPR' '$TEMPLATE' | $SORT | uniq -c | sed -e 's/\([0-9]\) */\1\t/' | sort -f -k 2 | sort -n -r -k 1,1 -s$HEAD | column -t -s '"$'\t'"' -c 0$TAIL" if [ $VERBOSE = 1 ] then echo "$CMD"