#!/bin/bash set -e usage () { cat <&2; exit 1 ;; esac senderinfo="$1" rcpts="$2" msg="$3" exec <"$senderinfo" while read settingname value; do case "$settingname" in #*|'') continue;; *) vn=PIZZANOTIFY_$settingname eval "$vn=\"\$value\"" export $vn ;; esac done 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