Linux/Macで補完されているコマンド($PATH配下にあるコマンド)や変数名の一覧をcompgenで取得する

補完されているコマンドの一覧を取得したいという場合、単純に考えると以下のように$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
Sponsored Links

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

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

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*