使用目录和固定集自定义 bash 完成

使用目录和固定集自定义 bash 完成

我正在尝试设置 bash 补全,但有两个问题

  1. 对于参数一,我需要完成目录
  2. 对于参数二,一个用于完成的固定数组,我只是不知道如何让 bash 进行选择,之前我总是使用 perl 脚本来处理复杂的脚本。
_some_func()
{
    case $COMP_CWORD in
    1)
        # default completion ? how
        ;;
    2)
        COMPREPLY=( "go" "unbind" )
        # I should be using a program to echo "go" and "unbind",
        # and let bash decide which one to complete , right ? 
        # that's the only two possible parameters here
        ;;
    esac
}

complete -F _some_func some_func

答案1

这是一种方法:设置dirnames为默认完成,并为第二个参数生成自定义完成。

_some_func () {
  case $COMP_CWORD in
    1) :;; # let the default take over
    2) COMPREPLY=($(compgen -W "go unbind" "${COMP_WORDS[$COMP_CWORD]}"));;
    *) COMPREPLY=("");;
  esac
}
complete -F _some_func -d some_func

您也可以调用compgen -dwhen $COMP_CWORDis 1,但这在 bash 中效果不佳,因为您需要转义 输出中的空格compgen,并且您无法区分分隔两个结果的换行符和完成中包含的换行符(罕见,但有可能)。

相关内容