@@ -2610,14 +2610,31 @@ _comp_xfunc()
26102610}
26112611
26122612# source compat completion directory definitions
2613- _comp__init_compat_dir=${BASH_COMPLETION_COMPAT_DIR:-/ etc/ bash_completion.d}
2614- if [[ -d $_comp__init_compat_dir && -r $_comp__init_compat_dir && -x $_comp__init_compat_dir ]]; then
2613+ _comp__init_compat_dirs=()
2614+ if [[ -n $BASH_COMPLETION_COMPAT_DIR ]]; then
2615+ _comp__init_compat_dirs+=(" $BASH_COMPLETION_COMPAT_DIR " )
2616+ else
2617+ _comp__init_compat_dirs+=(/etc/bash_completion.d)
2618+ # Similarly as for the "completions" dir, look up from relative to
2619+ # bash_completion, primarily for run-in-place-from-git-clone setups.
2620+ # Notably we do it after the system location here, in order to
2621+ # prefer in-tree variables and functions.
2622+ if [[ $BASH_SOURCE == * /* ]]; then
2623+ _comp__init_compat_dir=" ${BASH_SOURCE%/* } /bash_completion.d"
2624+ [[ ${_comp__init_compat_dirs[0]} == " $_comp__init_compat_dir " ]] ||
2625+ _comp__init_compat_dirs+=(" $_comp__init_compat_dir " )
2626+ else
2627+ _comp__init_compat_dirs+=(./bash_completion.d)
2628+ fi
2629+ fi
2630+ for _comp__init_compat_dir in " ${_comp__init_compat_dirs[@]} " ; do
2631+ [[ -d $_comp__init_compat_dir && -r $_comp__init_compat_dir && -x $_comp__init_compat_dir ]] || continue
26152632 for _comp__init_file in " $_comp__init_compat_dir " /* ; do
26162633 [[ ${_comp__init_file##*/ } != @ ($_comp_backup_glob | Makefile* | ${BASH_COMPLETION_COMPAT_IGNORE-} ) &&
26172634 -f $_comp__init_file && -r $_comp__init_file ]] && . " $_comp__init_file "
26182635 done
2619- fi
2620- unset -v _comp__init_compat_dir _comp__init_file
2636+ done
2637+ unset -v _comp__init_compat_dirs _comp__init_compat_dir _comp__init_file
26212638
26222639# source user completion file
26232640#
0 commit comments