自定义bash自动完成

时间:2017-10-29 13:05:03

标签: bash shell bash-completion

如何自定义bash自动完成以列出另一个目录中的文件只有一个脚本选项(-seq),对于其他脚本选项(-speed,-define),默认自动完成是O.K.这就是我所拥有的

 export files=`ls /home/tests/`
 echo $files #debug     

 _xtest ()   {                .
      local cur
      COMPREPLY=()     cur=${COMP_WORDS[COMP_CWORD]}
       #case "$cur" in
       COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
    #  esac
      return 0
    }

    complete -F _xtest -o filenames xtest

当我尝试从shell运行时,我在文件列表

之前得到以下消息
> xtest -seq [TAB][TAB]

 bash: .: filename argument required
.: usage: . filename [arguments]

有没有办法在文件列表之前不接收此消息?
如何为其他选项启用默认bash完成?

1 个答案:

答案 0 :(得分:0)

应该使用$ prev而不是$ cur:

_xtest ()   {              
      local prev
      COMPREPLY=()     
      prev=${COMP_WORDS[COMP_CWORD-1]}
      case "$prev" in
       -seq )
          COMPREPLY=( $(compgen -W "${files}" -- ${cur}) ) ;;
      esac
      return 0
    }
complete -F _xtest -o filenames xtest