# LECA Bash library # # The LECA bash library provides a set of function used for helping # development of bash script mainly to write job script on the luke # cluster # # The files from the LECA Bash library must be sourced from your main script # # if [[ -z "${LECALIB_UTIL_SH}" ]]; then LECALIB_UTIL_SH=1 LECABASHLIB_RELOADING=0 if [[ -z "$LECABASHLIB_PATH" ]] ; then export LECABASHLIB_PATH="" fi THIS_DIR="$(dirname ${BASH_SOURCE[0]})" source "${THIS_DIR}/lecabashlib.sh" function abspath() { local P=$1 echo "$(cd "$(dirname "${P}")" && pwd -P)/$(basename "${P}")" } LECALIB_DIR=$(abspath "${THIS_DIR}") function upper() { echo $1 | tr "a-z" "A-Z" } function lower() { echo $1 | tr "A-Z" "a-z" } function indirect() { eval echo \$${1} } function include() { local MODULE=$(upper $1) local LOADED_MODULE_VAR="LECALIB_${MODULE}_SH" local LOADED_MODULE=$(indirect $LOADED_MODULE_VAR) local found="" for path in $(echo $LECABASHLIB_PATH | sed 's/:/ /g') ; do if [[ -z "$found" && \ ( -z "${LOADED_MODULE}" || \ "$LECABASHLIB_RELOADING" == 1 ) && \ -f "${path}/${1}.sh" ]] ; then source "${path}/${1}.sh" eval $LOADED_MODULE_VAR=1 found=1 fi done if [[ -z "$found" && \ ( -z "${LOADED_MODULE}" || \ "$LECABASHLIB_RELOADING" == 1 ) && \ -f "${LECALIB_DIR}/${1}.sh" ]] ; then source "${LECALIB_DIR}/${1}.sh" eval $LOADED_MODULE_VAR=1 found=1 fi if (( found == 1 )) ; then if (( LECABASHLIB_RELOADING == 1 )) ; then logdebug "Module $1 reloaded..." else logdebug "Module $1 loaded..." fi else if [[ -z "${LOADED_MODULE}" ]] ; then logerror "Cannot load module $1" fi fi } function reload() { LECABASHLIB_RELOADING=1 include "${1}" LECABASHLIB_RELOADING=0 } function onluke() { [[ $(hostname) =~ ^luke[0-9]* ]] } function onfroggy() { [[ $(hostname) =~ ^frog ]] } function pushd () { command pushd "$@" > /dev/null } function popd () { command popd "$@" > /dev/null } include logging fi