export PATH=$PATH:/opt/ytools/bin ytools_log() { echo $@ } ytools_log_err() { echo $@ >&2 } ytools_source_config() { local o_verbose="" set -- `getopt 'v' $*` while [ "$1" != -- ]; do case $1 in -v) o_verbose=true;; *) ytools_log_err unknown option $1 exit 1;; esac shift done shift [ ! -r "$1" ] && return [ "$o_verbose" ] && ytools_log o reading config "<$1>" . $1 } ytools_source_configs() { local c local basename=${myname/.*/} local rc="$basename"rc local project=ytools local o_verbose="" set -- `getopt 'v' $*` while [ "$1" != -- ]; do case $1 in -v) o_verbose=true;; *) ytools_log_err unknown option $1 exit 1;; esac shift done shift config_files=" /etc/opt/$project/$basename.conf $HOME/.$project/$basename.conf $HOME/.$project/$rc $HOME/.$basename/$basename.conf $HOME/.$basename/$rc $HOME/.$rc " for c in $config_files; do ytools_source_config $c if [ -d $c.d ]; then local dirconfs=`find $c.d -maxdepth 1 -type f` local f for f in $dirconfs; do ytools_source_config $f done fi done } ytools_cat() { cat | sed 's/^[ ]*|//' } ytools_waitpid() { local pid=$1 local t=5 [ "$2" ] && t=$2 while ((t > 0)); do [ -f /proc/$pid/status ] || { wait $pid return 0 } sleep 1 ((t -= 1)) done return 1 } ytools_terminate() { local pid for pid in $@; do [ -f /proc/$pid/status ] && { echo terminating process $pid kill $pid ytools_waitpid $pid || { echo "failed to normally terminate process $pid, killing it" >&2 kill -9 $pid ytools_waitpid $pid || { echo "failed to kill process $pid" >&2 return 1 } } } done return 0 }