mirror of
https://github.com/pyenv/pyenv.git
synced 2025-11-16 23:33:45 -05:00
Fix traversing PATH for bash < 4.4
Bash versions before 4.4 did not support the `-d` nor `-t` flags for readarray: https://lists.gnu.org/archive/html/info-gnu/2016-09/msg00012.html This switches away from readarray/"read" completely in favor of traversing PATH by using string substitution.
This commit is contained in:
@@ -154,25 +154,27 @@ print_usage() {
|
||||
if [ "$1" = "--complete-commands" ]; then
|
||||
command_prefix="${2:-}"
|
||||
seen=()
|
||||
if [ "$(type -t readarray)" = "builtin" ]; then
|
||||
readarray -d : -t paths < <(printf "%s" "$PATH")
|
||||
else
|
||||
# bash 3.x compatibility
|
||||
IFS=: read -r -a paths <<<"$PATH" || true
|
||||
fi
|
||||
shopt -s nullglob
|
||||
for path in "${paths[@]}"; do
|
||||
for command in "${path}/rbenv-${command_prefix}"*; do
|
||||
command_name="${command##*/}"
|
||||
command_name="${command_name#rbenv-}"
|
||||
command_name="${command_name#sh-}"
|
||||
[[ " ${seen[*]} " != *" ${command_name} "* ]] || continue
|
||||
seen+=("$command_name")
|
||||
summary=""
|
||||
eval "$(extract_initial_comment_block < "$command" | collect_documentation)"
|
||||
[ -n "$summary" ] || continue
|
||||
printf "%s:%s\n" "$command_name" "$summary"
|
||||
done
|
||||
PATH_remain="$PATH"
|
||||
# traverse PATH to find "rbenv-" prefixed commands
|
||||
while true; do
|
||||
path="${PATH_remain%%:*}"
|
||||
if [ -n "$path" ]; then
|
||||
for rbenv_command in "${path}/rbenv-"*; do
|
||||
command_name="${rbenv_command##*/}"
|
||||
command_name="${command_name#rbenv-}"
|
||||
command_name="${command_name#sh-}"
|
||||
[[ $command_name == "${command_prefix}"* ]] || continue
|
||||
[[ " ${seen[*]} " != *" ${command_name} "* ]] || continue
|
||||
seen+=("$command_name")
|
||||
summary=""
|
||||
eval "$(extract_initial_comment_block < "$rbenv_command" | collect_documentation)"
|
||||
[ -n "$summary" ] || continue
|
||||
printf "%s:%s\n" "$command_name" "$summary"
|
||||
done
|
||||
fi
|
||||
[[ $PATH_remain == *:* ]] || break
|
||||
PATH_remain="${PATH_remain#*:}"
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user