#!/bin/bash assert_is_app() { local check_link=yes while getopts "C" opt do case $opt in C) check_link=no ;; esac done if [ ! -d .app ] then echo "This is not an app, missing directory: '.app'" >&2 exit 1 fi if [[ $check_link == yes ]] then if [ ! -e current ] then echo "Missing 'current' link." >&2 exit 1 fi fi } list_apps() { local filter_name=$1; shift local filter_instnace=$1; shift local vars="$@" sort $apps/.app/var/list | while read line do echo $line | (IFS=:; while read name instance version junk do if [ -n "$filter_name" -a "$filter_name" != "$name" ] then continue fi if [ -n "$filter_instance" -a "$filter_instance" != "$instance" ] then continue fi local line="" IFS=" "; for var in $vars do case $var in name) x=$name;; instance) x=$instance;; version) x=$version;; current_version) x=`find_current_version $name $instance`;; *) x="";; esac if [ -z "$line" ] then line="$line$x" else line="$line:$x" fi done echo $line done) done } find_current_version() { local name=$1 local instance=$2 if [ ! -L $apps/$name/$instance/current ] then return 0 fi ( cd $apps/$name/$instance ls -l current | sed -n "s,.* current -> versions/\(.*\)/root,\1,p" ) } find_versions() { local name="$1" local instance="$2" if [ ! -d $apps/$name/$instance/versions ] then return 0 fi ( cd $apps/$name/$instance/versions ls -1d * ) } grep_path() { local regex="$1"; shift local path="$1"; shift find `echo $path | tr : " "` -type f -executable 2>/dev/null | (egrep "$regex" || exit 0) # IFS=: # for x in $path # do # ls $x/* 2>/dev/null | while read f # do # if [[ $f =~ $regex ]] # then # echo $f # fi # done # done } # TODO: set ulimit # TODO: set umask # TODO: change group newgrp/sg run_app() { local name=$1; shift local instance=$1; shift local bin=$1; shift local method=$1; shift assert_is_instance operate_usage "$name" "$instance" local x="" if [ ! -z "$APPSH_APPS" ] then x="$APPSH_APPS/" fi ( cd $x$name/$instance APPSH_INSTANCE_HOME=`pwd` cd current local e=`$APPSH_HOME/bin/app-cat-conf -f $apps/$name/$instance/current/etc/app.conf -g env | cut -f 2- -d .` #e="`get_conf_in_group $apps $name $instance env`" # This magically get the expansion of $u correct. IFS=" " # Set a default PATH which can be overridden by the application's settings set +e env -i \ PATH=/bin:/usr/bin \ $e \ PWD="$PWD" \ APPSH_METHOD=$method \ APPSH_APPS=$apps \ APPSH_HOME=$APPSH_HOME \ APPSH_NAME=$name \ APPSH_INSTANCE=$instance \ APPSH_INSTANCE_HOME=$APPSH_INSTANCE_HOME \ $bin "$@" local ret=$? set +x set -e exit $ret ) }