19

私が欲しいのは、プログラムから呼び出すことができる関数です。これにより、bashがコマンドラインとTABが押された場所を指定するのと同じように完了します。

. /etc/bash_completion
generate_completions "command arg1 arg2" 17

と同じものを返します

command arg1 arg2[TAB]

私はこれを行う方法を見たことがありません。

4

1 に答える 1

12

apt-getオートコンプリートがubuntuでどのように機能するかを理解するために実際にこれを行う必要がありました(独自の疑似リポジトリツールを構築しました:)

これは多段階のプロセスです。

まず、complete -p構成を複製するために実行できる一連のコマンドの形式で、すべての完了のリストを提供します。たとえば、のオートコンプリートを探したいとしますapt-get。それで:

$ complete -p | grep apt-get
complete -F _apt_get apt-get

これは、シェル関数_apt_getが完了メカニズムによって呼び出されることを示しています。

関数で使用される特別な変数、つまりCOMP_LINE(フルライン)、COMP_WORDS(すべての引数のbash配列-基本的にはCOMP_LINEを分割)、COMP_CWORD(インデックス、最後の値を指す必要があります)、COMP_POINT(単語内でオートコンプリートを実行している場所)、およびCOMP_TYPE(これは、タブを押すように完了したいことを伝える方法です)。

注:詳細については、マンページをお読みください。これが、私が最初に理解した方法です。 man bash

于 2011-07-19T02:56:42.050 に答える