diff --git a/functions b/functions index 445af5fa57..95ae239be4 100644 --- a/functions +++ b/functions @@ -57,15 +57,12 @@ function cp_it { # die $LINENO "message" function die() { local exitcode=$? + set +o xtrace + local line=$1; shift if [ $exitcode == 0 ]; then exitcode=1 fi - set +o xtrace - local msg="[ERROR] $0:$1 $2" - echo $msg 1>&2; - if [[ -n ${SCREEN_LOGDIR} ]]; then - echo $msg >> "${SCREEN_LOGDIR}/error.log" - fi + err $line "$*" exit $exitcode } @@ -75,14 +72,49 @@ function die() { # NOTE: env-var is the variable name without a '$' # die_if_not_set $LINENO env-var "message" function die_if_not_set() { - ( - local exitcode=$? - set +o xtrace - local evar=$2; shift - if ! is_set $evar || [ $exitcode != 0 ]; then - die $@ - fi - ) + local exitcode=$? + FXTRACE=$(set +o | grep xtrace) + set +o xtrace + local line=$1; shift + local evar=$1; shift + if ! is_set $evar || [ $exitcode != 0 ]; then + die $line "$*" + fi + $FXTRACE +} + + +# Prints line number and "message" in error format +# err $LINENO "message" +function err() { + local exitcode=$? + errXTRACE=$(set +o | grep xtrace) + set +o xtrace + local msg="[ERROR] $0:$1 $2" + echo $msg 1>&2; + if [[ -n ${SCREEN_LOGDIR} ]]; then + echo $msg >> "${SCREEN_LOGDIR}/error.log" + fi + $errXTRACE + return $exitcode +} + + +# Checks an environment variable is not set or has length 0 OR if the +# exit code is non-zero and prints "message" +# NOTE: env-var is the variable name without a '$' +# err_if_not_set $LINENO env-var "message" +function err_if_not_set() { + local exitcode=$? + errinsXTRACE=$(set +o | grep xtrace) + set +o xtrace + local line=$1; shift + local evar=$1; shift + if ! is_set $evar || [ $exitcode != 0 ]; then + err $line "$*" + fi + $errinsXTRACE + return $exitcode } @@ -538,6 +570,7 @@ function inicomment() { sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=.*$\)|#\1|" "$file" } + # Uncomment an option in an INI file # iniuncomment config-file section option function iniuncomment() { @@ -559,6 +592,7 @@ function iniget() { echo ${line#*=} } + # Determinate is the given option present in the INI file # ini_has_option config-file section option function ini_has_option() { @@ -570,6 +604,7 @@ function ini_has_option() { [ -n "$line" ] } + # Set an option in an INI file # iniset config-file section option value function iniset() { @@ -592,6 +627,7 @@ $option = $value fi } + # Get a multiple line option from an INI file # iniget_multiline config-file section option function iniget_multiline() { @@ -603,6 +639,7 @@ function iniget_multiline() { echo ${values} } + # Set a multiple line option in an INI file # iniset_multiline config-file section option value1 value2 valu3 ... function iniset_multiline() { @@ -632,6 +669,7 @@ $option = $v done } + # Append a new option in an ini file without replacing the old value # iniadd config-file section option value1 value2 value3 ... function iniadd() { @@ -643,6 +681,17 @@ function iniadd() { iniset_multiline $file $section $option $values } +# Find out if a process exists by partial name. +# is_running name +function is_running() { + local name=$1 + ps auxw | grep -v grep | grep ${name} > /dev/null + RC=$? + # some times I really hate bash reverse binary logic + return $RC +} + + # is_service_enabled() checks if the service(s) specified as arguments are # enabled by the user in ``ENABLED_SERVICES``. #