X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=post-pizza-notify.git;a=blobdiff_plain;f=notify;fp=notify;h=e13d97e6cb91a095842e59ed8c9295005bd2b2ed;hp=f061ffca8fe059e44ab50700e567ed5970d434d0;hb=b33776ec58263cd3b1f6b844487f1aa7c7a99292;hpb=f3fd390fffabd9c1d44afae44753f105156cd135 diff --git a/notify b/notify index f061ffc..e13d97e 100755 --- a/notify +++ b/notify @@ -34,30 +34,32 @@ while read settingname value; do esac done -exec <"$rcpts" -line=0 -while read method data; do - line=$(( $line+1 )) - case "$method" in - #*|'') continue ;; - [^a-z]*) echo >&2 "huh ? $rcpts:$line: $method"; continue ;; - esac - log=log-$method-$line.txt - exec >$log - set +e - printf >&2 "$method" - exec 3>&2 2>&1 - set -x - ./"via-$method" "$msg" $data 2>&1 - rc=$? - set +x - exec 2>&3 3>&- - set -e - if [ $rc != 0 ]; then - printf >&2 -- "-FAIL:%s\n" $log - else - printf >&2 " " - fi -done -exec >&2 -echo >&2 +perl <"$rcpts" -wne ' + use strict; + our @children; + our @passon; + BEGIN { @passon = @ARGV; @ARGV = (); } + s/^\s+//; + s/\s+$//; + next if m/^\#/; + next unless m/\S/; + die unless m/^([a-z]\w+)\s/; + my $method = $1; + my $child = fork; + defined $child or die $!; + if (!$child) { + exec "./onemethod", $method, @passon; + die $!; + } + push @children, $child; + END { + foreach my $child (@children) { + $!=$?=0; + my $got = waitpid $child, 0; + die $! unless $got==$child; + warn "$method [$child] $?" if $?; + } + } +' "$rcpts" "$msg" + +echo