compgen - 補完の候補を表示する

スポンサーリンク

compgenコマンドはbashの組み込みコマンドでcompleteコマンドの設定によって表示される補完の候補を標準出力し確認することができます。オプションについてはcompleteコマンドと同じオプションになり、completeコマンドの補完するリストを確認したり、completeコマンドの-Fオプションの関数で利用します。

complete - 補完機能の設定を行う
completeコマンドは、bashの組み込みコマンドになります。シェルでは入力途中の文字に対してTABを入力すると入力補完機能が働きます。completeコマンドはこの入力補完機能をどのように表示するかを設定できます。

compgenコマンドはcompleteコマンドとは違い、引数に入力中の補完候補の単語を取ることで、リストされる補完候補から候補を絞ることができます。

compgenコマンドの-Aオプションにある補完候補からユーザ名、コマンドや変数などを確認できるのも便利かもしれません。

補完候補を絞る

compgenコマンドは引数に入力中の補完候補がある場合、補完候補が絞られます。

例えば、compgenコマンドでシグナル名の表示を確認すると

のように表示されます。ここで、'SIGI'までの文字列を引数にすると、

のように、候補を絞ることができます。

パターンの決まっている補完候補リストを表示
(-Aオプション)

-Aオプションはアクションを指定して、パターンの決まっている補完候補のリストを表示できます。表示できる補完候補リストの種類は以下のようになります。アクションの種類にあるものを簡易的に確認するのにcompgenコマンドを利用してみても良いかもしれません。

アクションの種類

アクション意味オプション
aliasエイリアス(別名)-a
arrayvar配列変数 
bindingReadlineのキー・バインド名 
builtin組み込みコマンド-b
commandコマンド-c
directoryディレクトリ名-d
disabled無効な組み込みコマンド 
enabled有効な組み込みコマンド 
export環境変数-e
fileファイル名-f
functionシェルの関数名 
groupグループ名-g
helptopichelpコマンドでのトピック 
hostnameホスト名
(変数HOSTFILEの内容や/etc/hostsが参照)
 
jobジョブ名-j
keywordシェルの予約語-k
running動作中のジョブ名 
serviceサービス名-s
setoptsetコマンドの-oオプションの引数 
shoptshoptコマンドのオプション名 
signalシグナル名 
stopped停止中のジョブ名 
userユーザ名-u
variableシェルの変数名-v

コマンド例と実行結果

関数でcompgenコマンドを利用する

completeコマンドで利用する関数を作成する際、compgenコマンドを利用すると、補完候補を絞っていくような実装を行うことができます。

そのような実装を行う場合、引数にcompleteコマンドで渡される第2引数(補完中の単語)をcompgenコマンドに渡します。

func.sh

コマンド例と補完結果

compgenコマンドにある'--'の文字列はオプションの終端を示す文字列になります。

また、bash-completionがインストールされているなら、_init_completion関数を利用すると補完の関数を作成するのに便利です。_init_completionを利用する際は変数cur・prev・words・cwordをローカル宣言してから利用します。

func2.sh

コマンド例と補完結果

変数curには現在補完中の単語が、
変数prevには補完中の単語のひとつ前の単語が、
配列変数wordsにはコマンドを含めた最初の単語を0としたそれぞれの単語が、
変数cwordには単語の合計数(補完中の単語は含めない)が入ります。

参考

Bash Reference Manual