標準ユーティリティで動作するbashのオートコンプリートを理解することができます。しかし、Oracle SQLローダーなどのカスタム・プログラムのオートコンプリート機能はどのように実行しますか?
次のコマンドで Tab キーを押すと、control=
制御ファイル名が自動的に完成します。
sqlldr kshitiz/oracle@XE control=data.ctl data=data.csv bad=data.bad log=data.log
この時点で、他のファイルではなく制御ファイルを埋める必要があることをどうやって知ることができますか?
答え1
バッシュプログラム可能な完成コマンドラインを解析し、実行中の操作を把握する方法で機能します。
- 一部のコンテキストは特別に処理されます。たとえば、コマンドの最初の単語はコマンド名で完成し、a の後の内容は
$
変数名で完成します。 - これらのコンテキストの外側では、bashはコマンドの引数を完了し、コマンドの設定または失敗時にコマンドのデフォルト名を適用しようとします(通常はそうです)。
たとえば、bashはで始まるコマンド名を完成します。その後、bashは.で始まる変数名を完成させます。その後、bashはコマンドの完成ルールを適用します。完了ルールは、カテゴリ(ユーザー、変数、ファイルなど)、ファイル名のワイルドカードパターン、実行する関数またはコードスニペットを指定できます。sqllTab
sqll
sqlldr $aTab
a
sqlldr Tab
sqlldr
完了ルールは次のように定義されます。complete
内蔵。 Bashは、組み込みcomplete
関数が呼び出されるタイミングやその関数を含むスクリプト(存在する場合)を追跡しません。ほとんどのディストリビューションではバッシュ完了一般的に使用されるコマンドのルールセットを提供するパッケージです。これは、呼び出しcomplete
とその両方をロードするために読み取る必要がある.bashrc
(または実装されている場合)/etc/bash.bashrc
スクリプトを含む一連のスクリプトファイル形式を取ります。これを行うには、通常、. /etc/bash_completion
プログラム可能な完成を有効にし、利用可能なスクリプトをロードする必要があります。
標準パッケージにはそのサポートは含まれていませんsqlldr
。これらのサポートがある場合は、他のソースから提供する必要があります。このソースは、類似したディレクトリにファイルを配置した可能性があり/etc/bash_completion.d
、 を使用して現在のルールを表示できます.bashrc
。complete -p sqlldr
sqlldr
tcsh、zsh、およびFishには同様のメカニズムがありますが(すべてtcshに触発されています)、組み込み、構文、および機能が異なります。