Gnuがファイルパスの代わりにスクリプトを表示するのはなぜですか?

Gnuがファイルパスの代わりにスクリプトを表示するのはなぜですか?

使用すると、次の結果が表示されます。which

[user@localhost ~]$ which gem
gem ()
{ 
    \typeset result;
    ( \typeset rvmrc;
    rvm_rvmrc_files=("/etc/rvmrc" "$HOME/.rvmrc");
    if [[ -n "${rvm_prefix:-}" ]] && ! [[ "$HOME/.rvmrc" -ef "${rvm_prefix}/.rvmrc" ]]; then
        rvm_rvmrc_files+=("${rvm_prefix}/.rvmrc");
    fi;
    for rvmrc in "${rvm_rvmrc_files[@]}";
    do
        [[ -s "${rvmrc}" ]] && source "${rvmrc}" || true;
    done;
    unset rvm_rvmrc_files;
    command gem "$@" ) || result=$?;
    hash -r;
    return ${result:-0}
}

以前は表示エイリアスを見たことがありますが、whichbashスクリプトは見たことがありません。

スクリプトは明らかにRVMで提供されていますが、どのように入り、which私のファイルシステムでどこにありますか?それはそこにありません.bashrc

答え1

この試み:

shopt -s extdebug
declare -F gem

からman builtins

extdebug
    If set, behavior intended for use by debuggers is enabled:
    1.     The -F option to the declare builtin displays the source file
           name and line number corresponding to each function name sup‐
           plied as an argument.

関連情報