16

これは「カスタムタブ補完」よりも適切な名前である可能性がありますが、シナリオは次のとおりです。

通常、コマンドラインでコマンドを入力し、続いて{TAB}を2回入力すると、現在のディレクトリ内のすべてのファイルとサブディレクトリのリストが表示されます。例えば:

[user@host tmp]$ cat <TAB><TAB>
chromatron2.exe                  Fedora-16-i686-Live-Desktop.iso  isolate.py
favicon.ico                      foo.exe                          James_Gosling_Interview.mp3

しかし、少なくとも1つのプログラムがどういうわけかこのリストをフィルタリングしていることに気づきましたwine。検討:

[user@host tmp]$ wine <TAB><TAB>
chromatron2.exe  foo.exe

結果をに効果的にフィルタリングします*.exe

フィルタリングを担当するある種のラッパースクリプトである可能性があると考えるとwhich、実行可能ファイルではなく実行可能ファイルであるfileことがわかります。wine

さて、この「フィルター」がプログラム自体に何らかの形でエンコードされているのか、それともデフォルトのワインのインストール中に指定されているのかわからないので、この質問がスタックオーバーフローまたはスーパーユーザーに適しているかどうかはわかりません。指を交差させてここに投げます。推測を間違えた場合はお詫び申し上げます。(また、いくつかの同様の質問を確認しましたが、ほとんどは無関係であるか、シェル構成の編集に関係していました。)

だから私の質問は、この「フィルタリング」はどのように達成されるのかということです。前もって感謝します。

4

3 に答える 3

13

この動作を設定する/etc/bash_completion関数とコマンドでいっぱいのファイルがシステム上にある可能性があります。completeこのファイルは、などのシェル起動ファイルの1つから供給されます~/.bashrc

/etc/bash_completion.dより多くの補完機能を備えた個々のファイルを含むというディレクトリもあります。これらのファイルは。によって供給され/etc/bash_completionます。

これは私のシステムwineからの完了コマンドのように見え/etc/bash_completionます:

complete -f -X '!*.@(exe|EXE|com|COM|scr|SCR|exe.so)' wine

このファイルのセットの大部分は、BashCompletionProjectによって維持されています。

于 2012-06-08T11:12:55.763 に答える
6

bashマニュアルのProgrammableCompletionを見て、それがどのように機能するかを理解することができます。

于 2012-06-08T05:09:01.487 に答える
5

私はこれが古いことを知っていますが、私は自分のスクリプトで同様のことをしたいと思っていました。

ここで作成した例を試してみることができます:http: //runnable.com/Uug-FAUPXc4hAADF/autocomplete-for-bash

上から貼り付けたコード:

# Create function that will run when a certain phrase is typed in terminal
# and tab key is pressed twice
_math_complete()
{
    # fill local variable with a list of completions
    local COMPLETES="add sub mult div"
    # you can fill this variable however you want. example:
    # ./genMathArgs.sh > ./mathArgsList
    # local COMPLETES=`cat ./mathArgsList`

    # we put the completions into $COMPREPLY using compgen
    COMPREPLY=( $(compgen -W "$COMPLETES" -- ${COMP_WORDS[COMP_CWORD]}) )
    return 0
}

# get completions for command 'math' from function '_math_complete()'
complete -F _math_complete math 

# print instructions
echo ""
echo "To test auto complete do the following:"
echo "Type math then press tab twice." 
echo "You will see the list we created in COMPLETES"
echo ""
于 2014-01-31T09:30:18.667 に答える