#!/bin/bash goodbye() { rm -rf $tmp [ "$1" ] && exit $1 } log() { echo $@ } error() { log $@ } fatal() { error $@ goodbye 1 } set_var() { local var=$1 shift eval local check=\$$var if [ -z "$check" ]; then eval $var="$@" fi } set_defaults() { set_var modules `cd $dir; ls streamline-*.sh | sed 's/streamline-//; s/\.sh//; /^project$/ d'` } usage() { cat <<- EOT | sed 's/^ *|//' | | $myname [options] module ... | | module(s) are the module to be executed, currently selected: $modules | | options are | | -h: display this help message and exit sucessfully | EOT goodbye $1 } # -------------- here we go trap goodbye INT KILL EXIT myname=`basename $0` dir=`dirname $0` eval set -- `getopt -- h "$@"` while [ "$1" != -- ]; do case $1 in -h) usage=0;; *) usage=1;; esac shift done shift # modules="$@" set_defaults [ "$usage" ] && usage $usage for m in $modules; do mod_script=$dir/streamline-$m.sh log running $mod_script status status=`$mod_script status` r=$? if [ "$r" != 0 ]; then fatal "running "$mod_script status" failed ($r)" fi case $status in not-implemented) log "module $m is not implemented, yet, ignoring" ;; due) log "need to run module $m" ;; *) fatal "unrecognized output from module $m" ;; esac done