编写命令行程序增加自动补全功能

最近正在编写一套完整的存储系统,涉及到命令行程序,需要增加自动补全功能以提高用户体验
这里用到了bash-completion工具可以直接yum装一下。

在/etc/bash_completion.d/ 目录下添加任意文件名文件,如flystor
比如你有如下命令树:

set 
   net 
      ip
      dns
      gw
   option
      hostname
      date

即当打完set用双击tab 应该可以显示二层net option两个子命令,如输入为set net 双击tab则应该出现 ip dns gw的提示,并且所有命令都带有自动补全功能

对应flystor文件中的内容为:

function _sms()
{
        local cur prev

        COMPREPLY=()
        cur="${COMP_WORDS[COMP_CWORD]}"
        prev="${COMP_WORDS[COMP_CWORD-1]}"

        case "${prev}" in
           set)
                COMPREPLY=( $(compgen -W "net option" ${cur}) )
                return 0
                ;;
           net)
                COMPREPLY=( $(compgen -W "ip dns gw" ${cur}) )
                return 0
                ;;
           option)
                COMPREPLY=( $(compgen -W "hostname date" ${cur}) )
                return 0
                ;;
        esac
}

代码初潜易懂,但这样写就很实用了。

完成后需要退出当前用户重新登录即可生效。