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 配列変数
binding Readlineのキー・バインド名
builtin 組み込みコマンド -b
command コマンド -c
directory ディレクトリ名 -d
disabled 無効な組み込みコマンド
enabled 有効な組み込みコマンド
export 環境変数 -e
file ファイル名 -f
function シェルの関数名
group グループ名 -g
helptopic helpコマンドでのトピック
hostname ホスト名
(変数HOSTFILEの内容や/etc/hostsが参照)
job ジョブ名 -j
keyword シェルの予約語 -k
running 動作中のジョブ名
service サービス名 -s
setopt setコマンドの-oオプションの引数
shopt shoptコマンドのオプション名
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