bashで、現在読み込まれているfunctionの一覧とその内容(コード)を、ターミナルからbashrc等を読まないで確認したい時がある。 調べたところ、以下のような方法で確認できるようだ。
1. setで調べる
単純に、全部のfunctionとその内容を見るだけであれば、setコマンドをオプションなしで実行してやればいい。 function以外も出力されてしまうが、読み込まれているfunctionとそのコードが出力される。
shellblacknon@test-ubuntu18:~$ set BASH=/bin/bash ... quote () { local quoted=${1//\'/\'\\\'\'}; printf "'%s'" "$quoted" }
2. compgenやdeclare(typeset)で調べる
単純に設定されているfunction等はsetで見れることは確認できたが、これだとちょっと見にくい。 functionの一覧を出力して、必要だったらその中身を見るようにしたい場合は、compgenやdeclare(aliasでtypesetが設定されてる場合もある様子)など、いくつか手段があるようだ。
functionの一覧を出力する場合は以下。
bash
compgen -A function
declare -F
typeset -F
shellblacknon@test-ubuntu18:~$ compgen -A function __expand_tilde_by_ref __get_cword_at_cursor_by_ref __git_eread __git_ps1 __git_ps1_colorize_gitstring ... blacknon@test-ubuntu18:~$ declare -F declare -f __expand_tilde_by_ref declare -f __get_cword_at_cursor_by_ref declare -f __git_eread declare -f __git_ps1 declare -f __git_ps1_colorize_gitstring declare -f __git_ps1_show_upstream declare -f __grub_dir declare -f __grub_get_last_option declare -f __grub_get_options_from_help declare -f __grub_get_options_from_usage declare -f __grub_list_menuentries declare -f __grub_list_modules ...
functionの内容を確認する場合は以下。
bash
declare -f <function名>
typeset -f <function名>
shellblacknon@test-ubuntu18:~$ declare -f quote quote () { local quoted=${1//\'/\'\\\'\'}; printf "'%s'" "$quoted" } blacknon@test-ubuntu18:~$ typeset -f quote quote () { local quoted=${1//\'/\'\\\'\'}; printf "'%s'" "$quoted" }
通常であれば読み込んでる.bashrc等をみればいいだけなのだけど、前に書いた ローカルのbashrcを使ってssh接続する方法 だとファイルが存在しないので利用できない。 そのような状態でも、この方法でfunctionの内容を調べることができる。