#!/usr/bin/env bash #------------------------------------------------- # 实现bash补全功能 # @author yeahoo2000@gmail.com #------------------------------------------------- _game_sh_competion(){ COMPREPLY=() local curr="${COMP_WORDS[COMP_CWORD]}" local prev="${COMP_WORDS[COMP_CWORD-1]}" local path="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 获取匹配信息 local s=$(${path}/game.sh completion) eval "declare -A doc=${s#*=}" # 处理当前输入的字符,转换成函数名 local name="" unset COMP_WORDS[0] for arg in ${COMP_WORDS[@]}; do name="${name}_${arg}" done name=${name:1} local OLDIFS="$IFS" local IFS=$'\n' COMPREPLY=($( for k in ${!doc[@]}; do if [[ $k == $prev ]]; then continue fi if [[ "$name" == "" ]] || [[ $k == ${name}* ]]; then local sp=$(eval "printf ' %.0s' {1..$((26 - ${#k}))}") printf "%-*s\n" "$COLUMNS" "$k$sp${doc[$k]}" fi done )) IFS="$OLDIFS" if [[ ${#COMPREPLY[*]} -eq 1 ]]; then COMPREPLY=( ${COMPREPLY[0]%% *} ) fi return 0 } # 注册触发条件 complete -F _game_sh_competion dev.sh