bash的多字命令完成

时间:2012-05-04 01:48:59

标签: bash autocomplete bash-completion

  

可能重复:
  Properly handling spaces and quotes in bash completion

我想使用多字引用的字符串来完成bash。

e.g。我希望能够做到这一点

$ command <tab> 
  "Long String 1"
  "Long String 2"

其中“Long String 1”和“Long String 2”是按Tab键时给出的建议。

我尝试使用此~/strings包含引用字符串列表

function _hista_comp(){
    local curw
    COMPREPLY=()
    curw=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=($(compgen -W '`cat ~/strings`' -- $curw))    
    return 0
}
complete -F _hista_comp hista

上面的函数将字符串拆分为空格。有没有办法让它返回整个引用的字符串?

例如,如果~/string有以下行

  "Long String 1"
  "Long String 2"  

它会提供5条建议,而不是2条。

1 个答案:

答案 0 :(得分:1)

在尝试了各种各样的事情后,我发现添加了

    IFS=$'\x0a';

到函数的开头(将输入分隔符更改为新行)使函数正确处理空格。

所以函数将是

function _hista_comp(){  
    IFS=$'\x0a';
    local curw
    COMPREPLY=()
    curw=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=($(compgen -W '`cat ~/strings`' -- $curw))    
        uset IFS
    return 0
}
complete -F _hista_comp hista

这将允许

$ command <tab> 
  "Long String 1"
  "Long String 2"

正如我所愿。