diff --git a/mo b/mo index eeb11ed..38d18bb 100755 --- a/mo +++ b/mo @@ -1128,6 +1128,10 @@ moTrimWhitespace moUsage moListFuncs moListVars +moUnload +moExport +moUnexport +moDeclare EOF } @@ -1139,13 +1143,63 @@ moListVars() { cat <<EOF MO_ORIGINAL_COMMAND MO_VERSION +MO_EXPORT EOF } +# Clear all shell functions and variables for names used by mo, +# restoring the shell to a state as though mo had never been sourced +# (assuming no naming collisions). +moUnload() { + unset -v $(moListVars) + unset -f $(moListFuncs) +} + + +# Mark for export all shell functions and variables used by mo, such +# that any child (or descendant) Bash process may call mo as though +# itself having sourced the file. +moExport() { + export $(moListVars) + export -f $(moListFuncs) + MO_EXPORT=1 +} + + +# Unmark for export all shell functions and variables used by, such +# that any new child (or descendant) Bash process would not inherit +# them, regardless of any past operations. +moUnexport() { + export -n $(moListVars) + export -fn $(moListFuncs) + MO_EXPORT= +} + + +# Print declaration of all shell functions and variables used by mo, +# suitable for processing by another Bash shell. Any Bash instance +# processing the output of this function may afterward call mo as +# though itself having sourced the file. +moDeclare() { + local functions="$(moListFuncs)" + if ! [ -z "${functions}" ]; then + declare -fp ${functions} + fi + local vars="$(moListVars)" + if ! [ -z "${vars}" ]; then + declare -p ${vars} + fi + if ! [ -z "${MO_EXPORT}" ]; then + echo moExport + fi +} + + # Save the original command's path for usage later MO_ORIGINAL_COMMAND="$(cd "${BASH_SOURCE[0]%/*}" || exit 1; pwd)/${BASH_SOURCE[0]##*/}" MO_VERSION="2.2.0" +MO_EXPORT= # If sourced, load all functions. # If executed, perform the actions as expected.