自己的bash完成没有破折号?

时间:2014-04-19 16:59:19

标签: bash ubuntu autocomplete

我想写自己的自动完成功能。但参数应该是可以访问的,而不是面对破折号

这是我目前的工作示例

# /etc/bash_completion.d/radio
_radio()
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="--foo --bar --baz"


    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    fi
}
complete -F _radio radio

我需要更改哪些内容没有破折号?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你希望你的命令能像:

$ radio <tab><tab>
bar  baz  foo

如果是这样,只需摆脱破折号。

以下是您修改过的脚本,认为它应该有效:

# /etc/bash_completion.d/radio
_radio()
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="foo bar baz"


    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    return 0
}
complete -F _radio radio

答案 1 :(得分:0)

@Vivek基本上是正确的,但是如果您完全删除if,则可以永久完成标签上的操作:

$ radio bar foo baz<tab>
bar  baz  foo

相反,您应该更改 if以仅查找第二个单词:

_radio()
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="foo bar baz"

    # only tab complete second word in command string
    if [[ ${#COMP_WORDS[@]}  == 2 ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    fi
}
complete -F _radio radio