2727#
2828# https://github.com/bash-d/bd/blob/main/LICENSE.md
2929
30+ BD_VERSION=0.46.2.3
31+
3032#
3133# init
3234#
@@ -42,10 +44,7 @@ if [ "${BASH_SOURCE}" == '' ]; then
4244 return 1 & > /dev/null
4345fi
4446
45- export BD_VERSION=0.46.2.2
46-
47- [ " ${_BD_PWD} " ] && return
48- export _BD_PWD=" ${PWD} "
47+ export BD_VERSION
4948
5049#
5150# functions
@@ -378,6 +377,36 @@ _bd_help() {
378377 printf " ${bd_help} "
379378}
380379
380+ # initialize the bd environment (for .bash_profile and .bashrc)
381+ _bd_init () {
382+ _bd_debug " ${FUNCNAME} (${@ } )" 55
383+
384+ local _bash_source _bash_source_basename _bd_variable_name _bd_value
385+
386+ for _bash_source in " ${BASH_SOURCE[@]} " ; do
387+ _bd_debug " _bash_source = ${_bash_source} " 20
388+
389+ _bash_source_basename=" ${_bash_source##*/ } "
390+ _bd_debug " _bash_source_basename = ${_bash_source_basename} " 22
391+
392+ if [ " ${_bash_source_basename} " == " .bash_profile" ] || [ " ${_bash_source_basename} " == " .bashrc" ]; then
393+ # reset environment for interactive or login shells
394+ _bd_debug " reset environment; sourced by = ${_bash_source} " 5
395+
396+ while IFS=' =' read -r _bd_variable_name _bd_variable_value; do
397+ [ " ${_bd_variable_name} " == " " ] && continue
398+ if [[ ${_bd_variable_name} == ' _BD' * ]] || [[ ${_bd_variable_name} == ' _bd' * ]]; then
399+ _bd_debug " unset -v ${_bd_variable_name} " 15
400+ unset -v ${_bd_variable_name}
401+ fi
402+ done < <( env)
403+ unset -v _bd_variable_name _bd_variable_value
404+
405+ break
406+ fi
407+ done
408+ }
409+
381410# load all config files & directories
382411_bd_load_config () {
383412 local bd_load_config_dir_name
@@ -568,6 +597,8 @@ _bd_main() {
568597
569598 local bd_main_option=1
570599
600+ _bd_init
601+
571602 case " ${1} " in
572603 bits | b | --bits | -b)
573604 _bd_bits ${@ }
@@ -595,11 +626,16 @@ _bd_main() {
595626 _bd_sundry version
596627 ;;
597628 * )
629+ # prevent excessive sourcing (e.g. from config files)
630+ [ " ${_BD_PWD} " ] && return
631+
598632 bd_main_option=0
599633
600634 _bd_debug " ${BD_SOURCE} ${1} pass; invoke autoloader" 10
601635
602636 _bd_autoloader ${@ }
637+
638+ export _BD_PWD=" ${PWD} "
603639 ;;
604640 esac
605641
@@ -796,6 +832,7 @@ _bd_namespace_reset() {
796832 bd_function_names+=(_bd_autoloader_execute_array)
797833 bd_function_names+=(_bd_bootstrap)
798834 bd_function_names+=(_bd_caller)
835+ bd_function_names+=(_bd_init)
799836 bd_function_names+=(_bd_load_config)
800837 bd_function_names+=(_bd_load_config_dir)
801838 bd_function_names+=(_bd_load_config_file)
@@ -818,17 +855,19 @@ _bd_namespace_reset() {
818855
819856 # unset function names
820857 for bd_function_name in ${bd_function_names[@]} ; do
821- unset -f " ${bd_function_name} " && _bd_debug " unset -f ${bd_function_name} " 15
858+ _bd_debug " unset -f ${bd_function_name} " 15
859+ unset -f " ${bd_function_name} "
822860 done
823861
824862 # unset variabe names
825863 for bd_variable_name in ${bd_variable_names[@]} ; do
826- unset -v ${bd_variable_name} && _bd_debug " unset -v ${bd_variable_name} " 15
864+ _bd_debug " unset -v ${bd_variable_name} " 15
865+ unset -v ${bd_variable_name}
827866 done
828867
829868 if [ " ${1} " != ' init' ]; then
830869 # functions used locally (& self)
831- unset -f _bd_true _bd_namespace_init _bd_namespace_reset
870+ unset -f _bd_init _bd_namespace_init _bd_namespace_reset _bd_true
832871 fi
833872}
834873export -f _bd_namespace_reset
0 commit comments