補完されているコマンドの一覧を取得したいという場合、単純に考えると以下のように$PATHを分解して各ディレクトリごとのファイル一覧を取得するような処理が考えつく。

echo -e ${PATH//:/\\n}|xargs -I@ ls -1 @ 2>/dev/null | sort
echo -e ${PATH//:/\\n}|xargs -I@ ls -1 @ 2>/dev/null | sort | grep ^STR

ただ、実はこんなことをしなくてもbashで用意されている補完用のコマンド「compgen」を使うことで、もっとスマートにコマンド一覧を取得できる。

compgen -c
compgen -c STR # 「STR」で始まるコマンドを出力する

blacknon@BS-PUB-DEVELOP:~$ echo -e ${PATH//:/\\n}|xargs -I@ ls -1 @ 2>/dev/null | sort | grep ^ps
ps
ps2pk
psfaddtable
psfgettable
psfstriptable
psfxtable
pstree
pstree.x11
pstruct
blacknon@BS-PUB-DEVELOP:~$ compgen -c ps | sort
ps
ps2pk
psfaddtable
psfgettable
psfstriptable
psfxtable
pstree
pstree.x11
pstruct

ちなみに、他にもいくつかオプションが用意されており、変数名の一覧などを取得することができる。

  • -a … エイリアスの一覧を取得
  • -b … シェルの組み込みコマンドの一覧を取得
  • -c … コマンドの一覧を取得
  • -d … カレントディレクトリにあるディレクトリ一覧を取得
  • -e … exportされているシェル変数名の一覧を取得
  • -f … カレントディレクトリにあるファイル一覧を取得
  • -g … ユーザグループの一覧を取得
  • -j … ジョブ名の一覧を取得する
  • -k … シェルの予約語の一覧を取得する
  • -s … サービス名の一覧を取得する
  • -u … ユーザ名の一覧を取得する
  • -v … シェルの変数名を取得する