【 compgen 】コマンド――bashの補完候補を生成する/使用できるコマンド名を一覧表示する:Linux基本コマンドTips(322)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashの補完候補を生成する/使用できるコマンド名を一覧表示する「compgen」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashの補完候補を生成する/使用できるコマンド名を一覧表示する「compgen」コマンドです。
compgenコマンドとは?
「compgen」はbashの補完候補を生成するコマンドです。bashの内部コマンド(ビルトインコマンド、シェルコマンド)であるため、「man」コマンドではなく、「help」コマンドや「man bash」で詳細を確認できます(man bash実行後に「/compgen \[option+[Enter]キー」と入力)。
bashでは、[Tab](または[CTRL]+[I])キーでコマンド名やファイル名の補完ができます。さらに各コマンドに対応する引数や対象ファイルなどを設定できる「プログラム補完」機能も利用できます(※1)。
※1 Programmable Completion(プログラム可能な補完)。本連載では日本語版の「man bash」に合わせて「プログラム補完」という訳語を使っています。
補完する内容はcompleteコマンド(連載第321回)で定義しますが、compgenコマンドは、completeコマンドと同じオプションを使って補完候補を生成することができます。completeコマンドの定義内容を確認する際に便利なコマンドです。
さらに、補完候補の対象としてコマンド名を指定することで、現在使用できるコマンドを一覧表示できます。
compgenコマンドの書式
compgen [オプション] [先頭の文字]
※[ ]は省略可能な引数を示しています。
compgenの主なオプション
オプション | 意味 |
---|---|
-A アクション | 補完候補リストをどのように作るかを「アクション」で指定する(別表「アクション」を参照) |
-G パターン | パターンに従って展開した結果を補完候補リストにする(パス名展開と同じパターンを指定できる) |
-W 単語リスト | 指定した単語を補完候補リストにする(単語の区切りは変数IFSで定義、デフォルトの区切りは空白文字) |
-F 関数 | 関数を実行して補完候補リストを生成する(※2) |
-C コマンド | 指定したコマンドの実行結果を補完候補にする(コマンドはサブシェル環境で実行される) |
-P 文字列 | 接頭辞。それぞれの補完候補の先頭に指定した文字列を付け加える(他の全てのオプションによって補完候補が生成された後に実行される) |
-S 文字列 | 接尾辞。それぞれの補完候補の末尾に指定した文字列を付け加える(他の全てのオプションによって補完候補が生成された後に実行される) |
-X パターン | パターンに従って展開した結果を補完候補から除外する(パス名展開と同じパターンを指定でき、他のオプションによって補完候補が生成された後に実行される) |
-o オプション | 補完オプションを指定する(別表「補完オプション」を参照) |
※2 関数で補完候補リストを生成する場合、生成したリストを配列変数「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のデフォルトの補完を行う(※3) |
-o dirnames | 補完仕様によって補完候補リストが生成できなかった場合、ディレクトリ名の補完を試みる |
-o plusdirs | 補完仕様によって生成された補完候補リストに、ディレクトリ名の補完を追加する |
-o filenames | 補完仕様によってファイル名を生成することを想定する。ディレクトリ名にスラッシュを加えたり特殊文字をクオートで囲んだりするなど、ファイル名特有の処理を施す。シェル関数と共に使用する。 |
-o nospace | 補完仕様によって生成された単語の後に空白を付け加えるデフォルト動作を抑制する |
※3 「$」から始まる場合は変数で補完し、「~」から始まる場合はユーザー名で、「@」から始まる場合はホスト名で、それ以外の場合はコマンド名で補完する。いずれも補完できなかった場合はファイル名で補完する。
completeコマンドの定義内容を確認する
「complete オプション 名前」でプログラム補完を定義する際に、「compgen オプション」を使って、実際にはどのような補完になるのかを試して、確認できます。
Copyright © ITmedia, Inc. All Rights Reserved.