-1

我正在尝试使用python-optcomplete软件包(来自 Debian Testing 的1.2-11.1 ):

$ cat /etc/bash_completion.d/optcomplete 
_optcomplete()
{
    COMPREPLY=( $( \
    COMP_LINE=$COMP_LINE  COMP_POINT=$COMP_POINT \
    COMP_WORDS="${COMP_WORDS[*]}"  COMP_CWORD=$COMP_CWORD \
    OPTPARSE_AUTO_COMPLETE=1 $1 ) )
}
$ source /etc/bash_completion.d/optcomplete 
$ complete -F _optcomplete optcomplete-test
$ pwd
/tmp/examples
$ ls -l
total 8
-rwxr-xr-x 1 wena wena 3490 Feb 24 23:25 optcomplete-conditional
-rwxr-xr-x 1 wena wena 3521 Feb 24 23:25 optcomplete-simple
$ echo $PATH 
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/tmp/examples
$ echo $PATH 
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/tmp/examples
$ optcomplete-simple -[TAB][TAB]

尝试完成时我一无所获……没有这家伙那么幸运。

这是取自项目网站的(截取的)代码(文件名:“optcomplete-simple”):

#!/usr/bin/env python
import os
import optparse, optcomplete

def main():
    parser = optparse.OptionParser()
    parser.add_option('-s', '--simple', action='store_true',
                      help="Simple really simple option without argument.")
    parser.add_option('-o', '--output', action='store',
                      help="Option that requires an argument.")
    opt = parser.add_option('-p', '--script', action='store',
                            help="Option that takes python scripts args only.")
    opt.completer = optcomplete.RegexCompleter('.*\.py')
    optcomplete.autocomplete(parser, ['.*\.tar.*'])
    opts, args = parser.parse_args()

if __name__ == '__main__':
    main()
4

1 回答 1

4

您正在将完成脚本绑定到optcomplete-test,但正在使用 进行测试optcomplete-simple。改用这个:

source /etc/bash_completion.d/optcomplete
complete -F _optcomplete optcomplete-simple

请注意(以防万一)更改$PATH不是绝对必要的。您可以通过其绝对路径或 as 运行脚本./optcomplete-simple并完成完成工作。此外,将目录添加到当前目录的标准方法$PATH是:

export PATH=/new/directory:$PATH
于 2012-02-28T13:50:11.127 回答