bash 自动完成脚本

dai*_*isy 7 bash autocomplete

我正在尝试为一个命令设置自动完成,它只需要一个参数,一个文件夹名称,

在 中/secure/kernel_builds/,我有以下三个子文件夹:

3.5.6/ 3.6.2/ source/

现在我想要自动完成,列出所有可能的子文件夹名称,但不是名为 的source,现在我正在使用一种非常愚蠢的方法来完成它,通过检查完成词是否以数字开头,

_avail_kernel_builds()
{
    case $COMP_CWORD in
        1)
            if [[ "${COMP_WORDS[COMP_CWORD]}" =~ ^[0-9] ]];then
                COMPREPLY=( /secure/kernel_builds/"${COMP_WORDS[COMP_CWORD]}"* )
            else
                COMPREPLY=( /secure/kernel_builds/"${COMP_WORDS[COMP_CWORD]}"[0-9]*/ )
            fi
            COMPREPLY=( "${COMPREPLY[@]#/secure/kernel_builds/}" )
            COMPREPLY=( "${COMPREPLY[@]%/}" )
            ;;
    esac    
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

pet*_*rph 0

您可以在循环中检查您(不)想要的字符串:

declare -a accept
declare -a reject
for s in "${COMPREPLY[@]}"; do
    if [[ "$s" =~ want ]]; then
        accept=( "${accept[@]}" "$s" )
    else
        reject=( "${reject[@]}" "$s" )
    fi
done
Run Code Online (Sandbox Code Playgroud)