bashで現在のセッションで読み込まれているfunctionの内容を確認する
Pocket

bashで、現在読み込まれているfunctionの一覧とその内容(コード)を、ターミナルからbashrc等を読まないで確認したい時がある。
調べたところ、以下のような方法で確認できるようだ。

1.setで調べる

単純に、全部のfunctionとその内容を見るだけであれば、setコマンドをオプションなしで実行してやればいい。
function以外も出力されてしまうが、読み込まれているfunctionとそのコードが出力される。

blacknon@test-ubuntu18:~$ set
BASH=/bin/bash
...
quote ()
{
    local quoted=${1//\'/\'\\'\'};
    printf "'%s'" "$quoted"
}
Sponsored Links

2.compgenやdeclare(typeset)で調べる

単純に設定されているfunction等はsetで見れることは確認できたが、これだとちょっと見にくい。
functionの一覧を出力して、必要だったらその中身を見るようにしたい場合は、compgenやdeclare(aliasでtypesetが設定されてる場合もある様子)など、いくつか手段があるようだ。

functionの一覧を出力する場合は以下。

compgen -A function
declare -F
typeset -F
blacknon@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の内容を確認する場合は以下。

declare -f <function名>
typeset -f <function名>
blacknon@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の内容を調べることができる。

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*