【 complete 】コマンド――補完の方法を指定する(bash)Linux基本コマンドTips(321)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashで補完を行う際の方法を指定する「complete」コマンドです。

» 2019年07月12日 05時00分 公開
[西村めぐみ@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashで補完を行う際の方法を指定する「complete」コマンドです。

completeコマンドとは?

 「complete」はbashでコマンドラインの「補完」を行う方法を指定するコマンドです。bashの内部コマンド(ビルトインコマンド、シェルコマンド)であるため、「man」コマンドではなく、「help」コマンドや「man bash」で詳細を確認できます(man bash実行後に「/complete \[-ab+[Enter]キー」と入力)。

 bashでは、[TAB](または[CTRL]+[I])キーでコマンド名やファイル名の補完ができます。さらに各コマンドに対応する引数や対象ファイルなどを設定できる「プログラム補完」機能も利用できます(※1)。completeコマンドは、コマンドラインで入力している途中のコマンドに対し、どのような内容を補完するかという「補完仕様(compspec)」を定義するために使います。

※1 Programmable Completion(プログラム可能な補完)。本連載では日本語版の「man bash」に合わせて「プログラム補完」という訳語を使っています。



 一部のコマンドについては、/etc/bash_completion.d/以下にプログラム補完の定義ファイルが用意されており、ログインと同時に利用可能になっています。例えば、「git」コマンドであれば、「git[スペース]」に続いて[Tab]キーを2回押すと、gitコマンドで使用可能なサブコマンドを一覧表示します(補完のキー操作については「Linux再入門(5)」参照)。

 なお、「bash-completion」パッケージをインストールした環境の場合、主要コマンドのプログラム補完が使えるようになっているでしょう。bash-completionパッケージによる定義ファイルは、/usr/share/bash-completion/下に格納されています。



completeコマンドの書式

complete [オプション] [名前……]

complete [-Dまたは-E] [その他のオプション]

complete -pまたは-r [-Dまたは-E] [名前……]

※[ ]は省略可能な引数を示しています。





completeの主なオプション(表示と削除)

オプション 意味
-p 名前 指定した名前について補完仕様を表示する。名前を省略した場合は全て表示する(本文を参照、※2)
-r 名前 指定した名前について補完仕様を削除する。名前を省略した場合は全て削除する(本文を参照、※2)

※2 「-D」や「-E」オプションによる定義(どちらも名前を指定せずに使用するオプション、別表「completeの主なオプション(定義)を参照)を表示、削除したい場合は「complete -p -D」のように指定する。



completeの主なオプション(定義)

オプション 意味
-D 補完仕様が定義されていないコマンドに対する補完(デフォルトのコマンド補完)を設定する(※3)
-E 空文字に対する補完を設定する
-A アクション 補完候補リストをどのように作るかを「アクション」で指定する(別表「アクション」を参照
-G パターン パターンに従って展開した結果を補完候補リストにする(パス名展開と同じパターンを指定できる)
-W 単語リスト 指定した単語を補完候補リストにする(単語の区切りは変数IFSで定義、デフォルトの区切りは空白文字)
-F 関数 関数を実行して補完候補リストを生成する(※4)
-C コマンド 指定したコマンドの実行結果を補完候補にする(コマンドはサブシェル環境で実行される)
-P 文字列 接頭辞。それぞれの補完候補の先頭に指定した文字列を付け加える(他の全てのオプションによって補完候補が生成された後に実行される)
-S 文字列 接尾辞。それぞれの補完候補の末尾に指定した文字列を付け加える(他の全てのオプションによって補完候補が生成された後に実行される)
-X パターン パターンに従って展開した結果を補完候補から除外する(パス名展開と同じパターンを指定でき、他のオプションによって補完候補が生成された後に実行される)
-o オプション 補完オプションを指定する(別表「補完オプション」を参照

※3 「-D」はbashバージョン4.1以降で有効。
※4 関数で補完候補リストを生成する場合、生成したリストを配列変数「COMPREPLY」にセットすることで補完候補にできる。



アクション(-A)

アクション指定 短縮オプション 補完候補
-A file -f ファイル名(「-f」は「-A file」に相当、以下同じ)
-A directory -d ディレクトリ名
-A command -c コマンド名(エイリアスや内部コマンドも含む)
-A alias -a エイリアス名
-A builtin -b シェルの内部コマンド名
-A enabled 有効になっているシェルの内部コマンドの名前(enableコマンド:連載第224回
-A disabled 無効になっているシェル内部コマンドの名前
-A function シェル関数の名前
-A keyword -k シェルの予約語
-A variable -v シェル変数の名前
-A export -e 環境変数(エクスポートされたシェル変数)の名前
-A arrayvar 配列変数の名前
-A setopt -o 「set」コマンドの-oオプション(setコマンド:連載第205回)で使用できる引数
-A shopt 「shopt」コマンドに指定できるシェルオプション名
-A job -j ジョブ名
-A stopped 停止中のジョブ名
-A running 実行中のジョブ名
-A signal シグナル名
-A service -s サービス名
-A user -u ユーザー名
-A group -g グループ名
-A hostname ホスト名(/etc/hostsとシェル変数「HOSTFILE」で指定されたファイルから取得)
-A binding readlineキー割り当て名(「bind」コマンド:連載第206回
-A helptopic 「help」コマンドに指定できるトピック名

補完オプション(-o)

オプション 意味
-o default 補完仕様によって補完候補リストが生成できなかった場合、デフォルトの補完(ファイル名補完)を行う
-o bashdefault 補完仕様によって補完候補リストが生成できなかった場合、bashのデフォルトの補完を行う(※5)
-o dirnames 補完仕様によって補完候補リストが生成できなかった場合、ディレクトリ名の補完を試みる
-o plusdirs 補完仕様によって生成された補完候補リストに、ディレクトリ名の補完を追加する
-o filenames 補完仕様によってファイル名を生成することを想定する。ディレクトリ名にスラッシュを加えたり特殊文字をクオートで囲んだりするなど、ファイル名特有の処理を施す。シェル関数と共に使用する。
-o nospace 補完仕様によって生成された単語の後に空白を付け加えるデフォルト動作を抑制する

※5 「$」から始まる場合は変数で補完し、「~」から始まる場合はユーザー名で、「@」から始まる場合はホスト名で、それ以外の場合はコマンド名で補完する。いずれも補完できなかった場合はファイル名で補完する。





現在の補完の定義を表示する

 「complete -p 名前」で、名前に対する「補完仕様(compspec)」、つまり、どのような引数やオプションを補完するように定義しているか、を表示します。名前を省略した場合、全ての定義を表示します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。