本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashの補完候補を生成する/使用できるコマンド名を一覧表示する「compgen」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashの補完候補を生成する/使用できるコマンド名を一覧表示する「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 [オプション] [先頭の文字]
※[ ]は省略可能な引数を示しています。
オプション | 意味 |
---|---|
-A アクション | 補完候補リストをどのように作るかを「アクション」で指定する(別表「アクション」を参照) |
-G パターン | パターンに従って展開した結果を補完候補リストにする(パス名展開と同じパターンを指定できる) |
-W 単語リスト | 指定した単語を補完候補リストにする(単語の区切りは変数IFSで定義、デフォルトの区切りは空白文字) |
-F 関数 | 関数を実行して補完候補リストを生成する(※2) |
-C コマンド | 指定したコマンドの実行結果を補完候補にする(コマンドはサブシェル環境で実行される) |
-P 文字列 | 接頭辞。それぞれの補完候補の先頭に指定した文字列を付け加える(他の全てのオプションによって補完候補が生成された後に実行される) |
-S 文字列 | 接尾辞。それぞれの補完候補の末尾に指定した文字列を付け加える(他の全てのオプションによって補完候補が生成された後に実行される) |
-X パターン | パターンに従って展開した結果を補完候補から除外する(パス名展開と同じパターンを指定でき、他のオプションによって補完候補が生成された後に実行される) |
-o オプション | 補完オプションを指定する(別表「補完オプション」を参照) |
※2 関数で補完候補リストを生成する場合、生成したリストを配列変数「COMPREPLY」にセットすることで補完候補にできる。
アクション指定 | 短縮オプション | 補完候補 |
---|---|---|
-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 default | 補完仕様によって補完候補リストが生成できなかった場合、デフォルトの補完(ファイル名補完)を行う |
-o bashdefault | 補完仕様によって補完候補リストが生成できなかった場合、bashのデフォルトの補完を行う(※3) |
-o dirnames | 補完仕様によって補完候補リストが生成できなかった場合、ディレクトリ名の補完を試みる |
-o plusdirs | 補完仕様によって生成された補完候補リストに、ディレクトリ名の補完を追加する |
-o filenames | 補完仕様によってファイル名を生成することを想定する。ディレクトリ名にスラッシュを加えたり特殊文字をクオートで囲んだりするなど、ファイル名特有の処理を施す。シェル関数と共に使用する。 |
-o nospace | 補完仕様によって生成された単語の後に空白を付け加えるデフォルト動作を抑制する |
※3 「$」から始まる場合は変数で補完し、「~」から始まる場合はユーザー名で、「@」から始まる場合はホスト名で、それ以外の場合はコマンド名で補完する。いずれも補完できなかった場合はファイル名で補完する。
「complete オプション 名前」でプログラム補完を定義する際に、「compgen オプション」を使って、実際にはどのような補完になるのかを試して、確認できます。
例えば「compgen -u」では、「-u」オプション(ユーザー名を補完する、「-A user」相当)で補完する内容を一覧表示します。
また、「compgen -u st」のように、先頭文字「st」を指定して、どのように補完されるかを確認できます。ここで、先頭文字の文字数には特に制限はありません。
compgen オプション
(「complete オプション」でどのような補完になるかを表示する)
compgen -u
(「-u」(ユーザー)で補完される内容を表示する)
compgen -u st
(「-u」で、「st+[Tab]キー」と入力した場合の補完内容を表示する)
compgen -f -X '!*.txt'
(「-f -X '!*.txt'」で補完される内容を確認する、連載第321回の画面2参照)
表示件数が多いため、画面1では「head」コマンドで実行結果の先頭部分だけを表示しています。
「compgen -c」で、補完候補となるコマンド名を一覧表示します。さらにコマンド名を絞り込むこともできます。例えば「compgen -c fg」とすると、「fg」から始まるコマンド名を一覧表示します。これは、コマンドラインで「fg」まで入力して[Tab]キーを押した際に表示する補完内容に相当します。
compgen -c
(補完候補となるコマンドを一覧表示する)
compgen -c fg
(fgから始まるコマンド名を一覧表示する)
表示件数が多いため、画面2ではheadコマンドで実行結果の先頭部分だけを表示しています。
西村 めぐみ(にしむら めぐみ)
元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。
Copyright © ITmedia, Inc. All Rights Reserved.