如何告诉bash有效的制表符补全,以表示我的Python脚本的参数


14

说我有一个程序hello.py,它的一个可能有效参数是:

./hello.py autoawesomesauce

可以输入:

./hello.py auto[tab]

这时将部分完成的参数发送给hello,后者将其本身识别出来,然后在shell上将其完成以:

./hello.py autoawesomesauce

我知道git会执行类似的操作,但是可以使用Python脚本+ Bash吗?


4
Python脚本不能。bash必须。

支持什么?

Answers:


7

在Linux系统上,通常可以在以下位置找到大量示例脚本:/etc/bash_completion.d。如果您获取这些脚本,则将获得自动完成行为。

我已经从该目录中提供了一个示例。这是unrar的完成脚本。

_unrar()
{
    local cur

    COMPREPLY=()
    _get_comp_words_by_ref cur

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '-ad -ap -av- -c- -cfg- -cl -cu \
            -dh -ep -f -idp -ierr -inul -kb -o+ -o- -ow -p -p- -r -ta \
            -tb -tn -to -u -v -ver -vp -x -x@ -y' -- "$cur" ) )
    else
        if [ $COMP_CWORD -eq 1 ]; then
            COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- "$cur" ) )
        else
            _filedir '@(rar|RAR)'
        fi
    fi

} &&
complete -F _unrar -o filenames unrar

什么_get_comp_words_by_ref
e-info128

4

此功能与Python无关。这是底层外壳的纯功能。因此,请阅读有关自动完成的bash文档。

Google的“ bash自动完成”功能,您会在前10个匹配中找到至少5个合理的文档。


这意味着将Python脚本包装在Bash脚本中是个好主意,让Bash脚本尽可能多地处理/解析参数。
卡扎尔克2012年

0

相关的StackOverflow职位。

complete 'your_command' 'p/*/`echo list_of_your_options`/'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.