カスタムbashタブ補完


34

cooltoolオプションのリストを含むカスタムコンソールユーティリティがあります

fooOption
barOption

tabキーを押してbashオプションをオートコンプリートできるようにするにはどうすればよいですか?

ユーザーが入力したことを意味します

$ ./cooltool foo_

を押したtab。その後

$ ./cooltool fooOption _

登場しました。


1
クロスポストしないでください。
ワッファー

2
この1つは移行され、もう1つは移行されないことに注意してください。多くのユーザーは、複数のSEサイトに質問を投稿すべきではないことにまだ気付いていないと思います。それらは、統一されたシステムではないさまざまなフォーラムに使用されており、いくつかの異なるフォーラムで、より迅速な回答の可能性を求めます。
-jcrawfordor

回答:


2

のbash完了スクリプトを記述しますcooltoolbashの補完パッケージには、例として使用することができ、多くの人気番組、用のスクリプトが付属しています。


40

最も簡単な方法は、次を.bashrcに追加することです。

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

を入力するたびcooltool f[TAB][TAB]に、_cooltool()関数が呼び出されます。それはあなたの現在の部分的な単語が何であるかをcompgen決定し、次にどのオプションが一致するかを決定します。これらCOMPREPLYは、表示される配列に保存されます。見man completeman compgen詳細については。

素敵なチュートリアルのチェックアウト:独自のBash完了関数の作成




2

dogbaneの答えに加えて、次のこともできます。

complete -W "fooOption barOption" cooltool

単に文字列の先頭から単語のリストに一致させたい場合。completeとcompgenはほとんどのオプションを共有しているようです。使用するコマンドで一致するのは「文字列の始まり」だけであることに気付いたので、_cooltool関数で次のような他のことを実行できることがきちんとわかりました。

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

オプション名の任意の場所に一致します。

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