もた日記

くだらないことを真面目にやる

Linux 現在の環境で利用可能なコマンド一覧をcompgenで表示

compgen


stackoverflow.com

現在の環境で利用可能なコマンド一覧を表示する方法は、Stack Overflowによるとbash組み込みコマンドのcompgenを使うとよいとのこと(TABを2回押して補完候補を全部出す方法はパイプが使えないし)。
man compgenによると補完で使われているコマンドらしい。

compgen [option] [word]


option に従って、word にマッチする補完候補のリストを生成します。 オプションには complete 組み込みコマンドと同じものが指定できますが、 -p と -r は指定できません。 マッチのリストは標準出力に出力されます。 -F や -C オプションを使用したときは、 プログラム補完機能によって設定された様々なシェル変数は、 利用可能であっても有用な値を持ちません。
マッチのリストは、同じフラグによる補完仕様で プログラム補完のコードが直接生成したかのように 生成されます。 word が指定されると、word にマッチする補完だけが表示されます。


戻り値は、 無効なオプションが指定された場合やマッチが生成されなかった場合以外は 真になります。


compgen -c(外部コマンド)

外部コマンド一覧を表示する。

$ compgen -c
egrep
fgrep
grep
l.
ll
 …省略…


compgen -a(エイリアス)

エイリアス一覧を表示する。外部コマンドと結果は同じだがエイリアスは設定されている。
エイリアスはaliasでも確認可能。

$ compgen -a
egrep
fgrep
grep
l.
ll
 …省略…


compgen -b(組み込みコマンド)

組み込みコマンド(ビルトインコマンド)一覧を表示する

$ compgen -b
.
:
[
alias
bg
 …省略…

組み込みコマンドはtypeだと以下のようになる(aliasが組み込みコマンド)。

$ type alias
alias はシェル組み込み関数です
$ type cut
cut は /usr/bin/cut です


compgen -k(キーワード)

ifなどのキーワード一覧を表示する。

$ compgen -k
if
then
else
elif
fi
 …省略…


compgen -A function(関数)

関数一覧を表示する。

$ compgen -A function
__fzf_cd__
__fzf_generic_path_completion
__fzf_history__
__fzf_select__
__fzf_select_tmux__
 …省略…


compgen -A function -abck(上記全部)

上記全部を表示する場合。

$ compgen -A function -abck


zshの場合


zshの場合はcompgenを実行すると、

$ compgen
zsh: command not found: compgen

のようになるので下記コマンドを実行すると使えるようになる。

$ autoload -Uz bashcompinit
$ bashcompinit