bash タブ補完はどのように機能しますか? 質問する

bash タブ補完はどのように機能しますか? 質問する

最近、シェルで多くの時間を過ごしていますが、タブのオートコンプリートがどのように機能するのか疑問に思っています。その背後にあるメカニズムは何ですか? bash はどのようにして各ディレクトリの内容を認識するのですか?

ベストアンサー1

オートコンプリートには 2 つの部分があります。

  • readlineライブラリは、fixjeがすでに述べたように、コマンドライン編集を管理し、タブが押されたときにbashを呼び出して補完を有効にします。次にbashは(次のポイントを参照)可能な補完のリストを提供し、readlineは既に入力された文字によって明確に識別される文字をできるだけ多く挿入します。(readlineライブラリはかなり細かく設定できます。セクションを参照してください。コマンドライン編集詳細については、Bash マニュアルを参照してください。

  • Bash 自体には、個々のコマンドの補完メカニズムを定義する組み込み機能がありますcomplete。現在のコマンドに何も定義されていない場合は、ファイル名による補完を使用します (Ignacio が言ったように、opendir/readdir を使用)。

    独自の補完を定義する部分については、セクションで説明します。プログラム可能な完了簡単に言うと、complete «options» «command»コマンドの補完を定義するのです。例えば、complete -u suコマンドの引数を完了するときにsu、現在のシステムのユーザーを検索します

    これが通常のオプションでカバーできる範囲よりも複雑な場合 (たとえば、引数のインデックスや以前の引数に応じて異なる補完がある場合)、 を使用できます。-F functionこれにより、シェル関数が呼び出され、可能な補完のリストが生成されます。 (これは、たとえば git 補完に使用されますが、これは非常に複雑で、サブコマンドや、場合によっては指定されたオプションに依存し、場合によってはブランチ名 (bash が認識できないもの) を使用します。)

単に を使用すると、現在の bash 環境で定義されている既存の補完を一覧表示してcomplete、何ができるかを把握できます。bash-completion パッケージ (またはシステムでの名前) がインストールされている場合は、多くのコマンドの補完がインストールされ、Wrikken が述べたように、 には、/etc/bash_completionこれを構成するためシェルの起動時に実行されることが多い bash スクリプトが含まれています。追加のカスタム補完スクリプトは に配置することができ/etc/bash_completion.d、それらはすべて から取得されます/etc/bash_completion

おすすめ記事