Bashオートコンプリートはどのように機能しますか?

Bashオートコンプリートはどのように機能しますか?

標準ユーティリティで動作するbashのオートコンプリートを理解することができます。しかし、Oracle SQLローダーなどのカスタム・プログラムのオートコンプリート機能はどのように実行しますか?

次のコマンドで Tab キーを押すと、control=制御ファイル名が自動的に完成します。

sqlldr kshitiz/oracle@XE control=data.ctl data=data.csv bad=data.bad log=data.log

この時点で、他のファイルではなく制御ファイルを埋める必要があることをどうやって知ることができますか?

ベストアンサー1

バッシュプログラム可能な完成コマンドラインを解析し、実行中の操作を把握する方法で機能します。

  1. 一部のコンテキストは特別に処理されます。たとえば、コマンドの最初の単語はコマンド名で完成し、a の後の内容は$変数名で完成します。
  2. これらのコンテキストの外側では、bashはコマンドの引数を完了し、コマンドの設定または失敗時にコマンドのデフォルト名を適用しようとします(通常はそうです)。

たとえば、bashはで始まるコマンド名を完成します。その後、bashは.で始まる変数名を完成させます。その後、bashはコマンドの完成ルールを適用します。完了ルールは、カテゴリ(ユーザー、変数、ファイルなど)、ファイル名のワイルドカードパターン、実行する関数またはコードスニペットを指定できます。sqllTabsqllsqlldr $aTabasqlldr Tabsqlldr

完了ルールは次のように定義されます。complete内蔵。 Bashは、組み込みcomplete関数が呼び出されるタイミングやその関数を含むスクリプト(存在する場合)を追跡しません。ほとんどのディストリビューションではバッシュ完了一般的に使用されるコマンドのルールセットを提供するパッケージです。これは、呼び出しcompleteとその両方をロードするために読み取る必要がある.bashrc(または実装されている場合)/etc/bash.bashrcスクリプトを含む一連のスクリプトファイル形式を取ります。これを行うには、通常、. /etc/bash_completionプログラム可能な完成を有効にし、利用可能なスクリプトをロードする必要があります。

標準パッケージにはそのサポートは含まれていませんsqlldr。これらのサポートがある場合は、他のソースから提供する必要があります。このソースは、類似したディレクトリにファイルを配置した可能性があり/etc/bash_completion.d、 を使用して現在のルールを表示できます.bashrccomplete -p sqlldrsqlldr

tcsh、zsh、およびFishには同様のメカニズムがありますが(すべてtcshに触発されています)、組み込み、構文、および機能が異なります。

おすすめ記事