Ray*_*ond 22 bash shell autocomplete bash-completion
当我实现bash自动完成功能时,有些东西让我感到困惑,我将它放在/etc/bash_completion.d/中
为了实现某些功能,我想:从变量中删除单词break字符冒号()$COMP_WORDBREAKS并/在开头添加斜杠()$COMP_WORDBREAKS.
COMP_WORDBREAKS=" /'><=;|&("
_mytool()
{
local cur=${COMP_WORDS[COMP_CWORD]}
compopt -o nospace
# my implement here
COMPREPLY=( $(compgen ..........my_implement......... -- $cur) )
}
complete -F _mytool mytool
Run Code Online (Sandbox Code Playgroud)
但是,我无法COMP_WORDBREAKS直接重置,因为该值与其他完成脚本共享.调用完成函数时,COMP_WORDS已经填充了变量数组,因此本地更改COMP_WORDBREAKS不起作用.
是否有任何解决方案可以更改COMP_WORDBREAKS一个完成脚本而对其他脚本没有影响?
$ echo $BASH_VERSION
4.2.10(1)-release
Run Code Online (Sandbox Code Playgroud)
Rad*_*ler 24
$COMP_WORDBREAKS在完成脚本中修改不是推荐的方式(因为它是一个全局变量,它可能会影响其他完成脚本的行为 - 例如ssh).
但是,bash完成提供了一些帮助方法,您可以使用它们来实现目标.
在完成单词中处理非破坏字符的推荐方法是使用两个辅助方法:
_get_comp_words_by_ref有-n EXCLUDE选项__ltrim_colon_completions
所以,这是一个如何在完成单词中处理冒号(:)的基本示例:
_mytool()
{
local cur
_get_comp_words_by_ref -n : cur
# my implementation here
COMPREPLY=( $(compgen ..........my_implement......... -- $cur) )
__ltrim_colon_completions "$cur"
}
complete -F _mytool mytool
Run Code Online (Sandbox Code Playgroud)
作为最后的提示,辅助方法位于/etc/bash_completion.查看内部以阅读每种方法的详细说明并发现更多辅助方法.
| 归档时间: |
|
| 查看次数: |
3997 次 |
| 最近记录: |