欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识
原文出处: 暗无天日

静态补全

建设静态补全很简朴,只需要利用 complete 的 -W (wordlist) 选项为剧本注册补全的单词列表就行了。

好比,假设有一个 myscript 剧本,可以接参数 him,her,me,you, 那么我们可以执行:

complete -W "him her me you" myscript

这样输入 myscript 后按两下TAB,就会列出所有大概的参数了:

[lujun9972@T520 .spacemacs.d]$ myscript 
her  him  me   you

甚至,当你输入首字母后再按 TAB,bash会自动筛选出以首字母开头的参数

[lujun9972@T520 .spacemacs.d]$ myscript h
her  him

除了 -W 之外, complete 尚有许多其他选项,好比可以利用

-A alias / -a
列出别名
-A directory / -d
列出目次
-A command / -c
列出呼吁
-A file / -f
列出文件
-A service / -s
列出处事名称
-A signal
列出信号名称
-A user / -u
列出用户名
-A group / -g
列出组名
-A variable / -v
列出shell变量

具体的说明可以看这里

动态补全

动态补全可以或许按照用户的情况动态的生成补全的内容。 当出动员态补全时,bash会在当前shell中执行一个补全函数,然后从变量 COMPREPLY 中读取补全的内容。

在这个补全函数中,劳务派遣管理系统,我们可以通过几个变量来获取当前用户输入呼吁的情况:

COMP_WORDS
一个数组,劳务派遣管理系统,包括了措施名称和已经输入的参数
COMP_CWORD
这是一个指向COMP_WORDS数组的索引,指明白当前光标地址的位置(从0开始)
COMP_LINE
当前呼吁行的内容

compgen呼吁

compgen是一款内置呼吁,它与 complete 呼吁雷同,但可以按照已经输入的内容对补全内容举办过滤,好比

compgen -W "him her me you" h

会输出功效:

him
her

该呼吁常在动态补全的补全函数中利用

注册动态补全函数

要为呼吁注册动态补全函数,则需要利用 completion 的 -F 函数 参数:

completion -F 补全函数 措施名称

举个例子

好比,我想为 myscript 增加一个补全,昆山软件开发,这个补全的逻辑是:

  • 第一个参数可以是 -f 或 -d
  • 第二个参数补全的内容由第一个参数的值来抉择,假如第一个参数为 -f 则补全文件名,假如第一个参数为 -d 则补全目次名。
  • 那么我们可以这么做:

    # 首先,界说一个补全函数
    function _myscript_completion()
    {
        if [[ "${COMP_CWORD}" == "1" ]];then
            # 若补全的是第一个参数,则可以是 -f 或 -d
            COMPREPLY=($(compgen -W "-f -d" ${COMP_WORDS[${COMP_CWORD}]}))
        elif [[ "${COMP_WORDS[1]}" == "-f" ]];then
            COMPREPLY=($(compgen -f ${COMP_WORDS[${COMP_CWORD}]}))
        elif [[ "${COMP_WORDS[1]}" == "-d" ]];then
            COMPREPLY=($(compgen -d ${COMP_WORDS[${COMP_CWORD}]}))
        fi
    }
    
    # 注册补全函数
    complete -F _myscript_completion myscript