Pythonスクリプトの引数に有効なタブ補完をbashに伝える方法


14

プログラムhello.pyがあり、有効な引数の1つがあるとします。

./hello.py autoawesomesauce

次のように入力できます:

./hello.py auto[tab]

その時点で、部分的に完了した引数がhelloに送信され、helloはそれを認識し、シェルで次のように完了します。

./hello.py autoawesomesauce

gitがこのようなことをすることは知っていますが、Pythonスクリプト+ Bashで実行できますか?


4
Pythonスクリプトではできません。bashする必要があります。

何に賛成ですか?

回答:


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ドキュメントを読んでください。

「bashオートコンプリート」をGoogleで検索すると、最初の10ヒットで少なくとも5つの妥当なドキュメントが見つかります。


つまり、PythonスクリプトをBashスクリプトでラップし、Bashスクリプトに可能な限り多くの引数の処理/解析を実行させることをお勧めします。
カザーク

0

参照してください。この関連StackOverflowのポストを。

complete 'your_command' 'p/*/`echo list_of_your_options`/'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.