856efb5e35
move non essential functions to extra module minimize essential modules functions to module.base and load that
100 lines
No EOL
2.9 KiB
Bash
100 lines
No EOL
2.9 KiB
Bash
#!/bin/bash
|
|
|
|
# additional module functions. Only need these explicitly
|
|
|
|
module_print() {
|
|
[ ! $1 ] && echo "no module specified" && return 1
|
|
# (return 0 2>/dev/null) && echo "module_load was sourced" || echo "module_log was executed"
|
|
local FILE
|
|
FILE=$(module_find $1)
|
|
[ $? -ne 0 ] && echo no module $1 found && return 1
|
|
cat $FILE
|
|
return 0
|
|
}
|
|
|
|
module_cp() {
|
|
[ ! $1 ] && echo "no module specified" && return 1
|
|
local FILE
|
|
FILE=$(module_find $1)
|
|
[ $? -ne 0 ] && echo no module $1 found && return 1
|
|
echo cp $FILE ${2:-$(pwd)}
|
|
cp $FILE ${2:-$(pwd)}
|
|
return 0
|
|
}
|
|
|
|
module_loaded() {
|
|
[ ! $1 ] && echo "no module specified" && return 1
|
|
local func
|
|
local ret
|
|
local file
|
|
ret=0
|
|
# function_list | grep module
|
|
file=$(module_find $1)
|
|
[ ! $file ] && echo no module $1 found && return 1
|
|
# echo list "$(function_list $file)"
|
|
for func in $(function_list $file)
|
|
do
|
|
[[ ! $(function_list | grep $func) ]] && ret=1
|
|
[[ $2 = -vv ]] && ([[ $ret = 0 ]] && echo "$func loaded" || echo "$func not loaded")
|
|
done
|
|
[[ $2 = -v ]] && echo "module: $1" && ([[ $ret = 0 ]] && echo "all functions " || echo "some or all functions not loaded")
|
|
[[ $ret = 0 ]] && echo "loaded"
|
|
return $ret
|
|
}
|
|
|
|
|
|
module_functions () {
|
|
if module_find $1 >/dev/null ; then
|
|
module_print $1 | grep -E '^[[:space:]]*([[:alnum:]_]+[[:space:]]*\(\)|function[[:space:]]+[[:alnum:]_]+)' \
|
|
| sed 's/[[:space:]]*//g' | cut -d '(' -f 1
|
|
fi
|
|
}
|
|
|
|
module_search() {
|
|
|
|
[ ! $1 ] && echo "no module search string" && return 1
|
|
|
|
local MDIRS
|
|
local MDIR
|
|
local DIRS
|
|
local NAME=$1
|
|
|
|
|
|
# MODULE_DIRS is array set in the environment and is an array of additional directories to
|
|
# search for modules. This makes is easy to include a custom module libraries outside
|
|
# the shell system. These take precedence over any modules found in shell directories below.
|
|
# Precedence is first in list to last.
|
|
|
|
if [[ $MODULE_DIRS ]]; then
|
|
for DIR in "${MODULE_DIRS[@]}"
|
|
do
|
|
if [[ -d $DIR ]]; then
|
|
echo custom modules
|
|
# echo $DIR/$NAME
|
|
# ls $DIR/$SEARCH
|
|
# [ $? -eq 0 ] && echo $RES && return 0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# BASH_SHELL_DIRS holds shell directories to search for modules. If will be searched
|
|
# in revsere order, user or network repos over host over base
|
|
DIRS=( ${BASH_SHELL_DIRS:-$BASH_SHELL_BASE} ${BASH_SHELL_NETWORKS_LOADED} )
|
|
[ -d BASH_SHELL_USER_DIR ] && DIRS=("${DIRS[@]}" "BASH_SHELL_USER_DIR")
|
|
[ -d $BASH_SHELL_DEV ] && DIRS=("${DIRS[@]}" "$BASH_SHELL_DEV")
|
|
|
|
cnt=${#DIRS[@]}
|
|
for ((i=1;i<=cnt;i++)); do
|
|
# find modules in reverse order so more specific ones override
|
|
DIR="${DIRS[cnt-i]}/modules"
|
|
if [[ -d $DIR ]]; then
|
|
echo search: "$DIR/$NAME"
|
|
FILES="$(command find -L ${DIR} -type f -iname "${NAME}.mod" -o -name "${NAME}".lib -o -name "${NAME}".func -o -name "${NAME}".sh -o -name "${NAME}".env)"
|
|
echo "$FILES"
|
|
# [ $? -eq 0 ] && echo $RES && return 0
|
|
fi
|
|
done
|
|
# no module found anywhere
|
|
return 1
|
|
|
|
} |